Jump to content

[1.15.2] How to make it save the energy


TallYate

Recommended Posts

public class FurnaceGeneratorTileEntity extends LockableLootTileEntity implements ITickableTileEntity {
	private int size = 2;
	private NonNullList<ItemStack> generatorContents = NonNullList.withSize(size, ItemStack.EMPTY);
	protected int numPlayersUsing;
	private IItemHandlerModifiable items = createHandler();
	private LazyOptional<IItemHandlerModifiable> itemHandler = LazyOptional.of(() -> items);
	public int burnTime = 0;

	private ModEnergyStorage energy = new ModEnergyStorage(100000, 2000);
	private LazyOptional<ModEnergyStorage> energyHolder = LazyOptional.of(() -> energy);

	public FurnaceGeneratorTileEntity(TileEntityType<?> typeIn) {
		super(typeIn);
	}

	public FurnaceGeneratorTileEntity() {
		this(ModTileEntityTypes.FURNACE_GENERATOR.get());
	}

	public void tick() {
		this.itemHandler.ifPresent(handler -> {
			if (this.burnTime == 0) {
				ItemStack fuel = handler.getStackInSlot(0);
				if (fuel.getItem() != Items.AIR) {
					int time = ForgeHooks.getBurnTime(fuel);
					if (time > 0) {
						fuel.setCount(fuel.getCount() - 1);
						this.burnTime += time;
					}
				}
			} else {
				this.burnTime--;
				this.getCapability(ModCapabilityEnergy.ENERGY).ifPresent(energyHandler -> {
					energyHandler.receiveEnergy(10, false);
				});
			}
		});
	}

	@Override
	public int getSizeInventory() {
		return size;
	}

	@Override
	public NonNullList<ItemStack> getItems() {
		return this.generatorContents;
	}

	@Override
	public void setItems(NonNullList<ItemStack> itemsIn) {
		this.generatorContents = itemsIn;
	}

	@Override
	public ITextComponent getDefaultName() {
		return new TranslationTextComponent("container.furnace_generator");
	}

	@Override
	public Container createMenu(int id, PlayerInventory player) {
		return new FurnaceGeneratorContainer(id, player, this);
	}

	@Override
	public CompoundNBT write(CompoundNBT compound) {
		super.write(compound);
		if (!this.checkLootAndWrite(compound)) {
			ItemStackHelper.saveAllItems(compound, this.generatorContents);
		}
		return compound;
	}

	@Override
	public void read(CompoundNBT compound) {
		super.read(compound);
		this.generatorContents = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY);
		if (!this.checkLootAndRead(compound)) {
			ItemStackHelper.loadAllItems(compound, this.generatorContents);
		}
	}

	private void playSound(SoundEvent sound) {
		double dx = (double) this.pos.getX() + 0.5D;
		double dy = (double) this.pos.getY() + 0.5D;
		double dz = (double) this.pos.getZ() + 0.5D;
		this.world.playSound((PlayerEntity) null, dx, dy, dz, sound, SoundCategory.BLOCKS, 0.5F,
				this.world.rand.nextFloat() * 0.1F + 0.5F);
	}

	@Override
	public boolean receiveClientEvent(int id, int type) {
		if (id == 1) {
			this.numPlayersUsing = type;
			return true;
		} else {
			return super.receiveClientEvent(id, type);
		}
	}

	@Override
	public void openInventory(PlayerEntity player) {
		if (!player.isSpectator()) {
			if (this.numPlayersUsing < 0) {
				this.numPlayersUsing = 0;
			}

			++this.numPlayersUsing;
			// this.onOpenOrClos();
		}
	}

	@Override
	public void closeInventory(PlayerEntity player) {
		if (!player.isSpectator()) {
			--this.numPlayersUsing;
			this.onOpenOrClose();
		}
	}

	protected void onOpenOrClose() {
		Block block = this.getBlockState().getBlock();
		if (block instanceof FurnaceGeneratorBlock) {
			this.world.addBlockEvent(this.pos, block, 1, this.numPlayersUsing);
			this.world.notifyNeighborsOfStateChange(this.pos, block);
		}
	}

	public static int getPlayersUsing(IBlockReader reader, BlockPos pos) {
		BlockState blockstate = reader.getBlockState(pos);
		if (blockstate.hasTileEntity()) {
			TileEntity tileentity = reader.getTileEntity(pos);
			if (tileentity instanceof FurnaceGeneratorTileEntity) {
				return ((FurnaceGeneratorTileEntity) tileentity).numPlayersUsing;
			}
		}
		return 0;
	}

	public static void swapContents(FurnaceGeneratorTileEntity te, FurnaceGeneratorTileEntity otherTe) {
		NonNullList<ItemStack> list = te.getItems();
		te.setItems(otherTe.getItems());
		otherTe.setItems(list);
	}

	@Override
	public void updateContainingBlockInfo() {
		super.updateContainingBlockInfo();
		if (this.itemHandler != null) {
			this.itemHandler.invalidate();
			this.itemHandler = null;
		}
	}

	@Override
	public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nonnull Direction side) {
		if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
			return itemHandler.cast();
		} else if (cap == ModCapabilityEnergy.ENERGY) {
			return energyHolder.cast();
		} else {
			return super.getCapability(cap, side);
		}
	}

	private IItemHandlerModifiable createHandler() {
		return new InvWrapper(this);
	}

	@Override
	public void remove() {
		super.remove();
		if (itemHandler != null) {
			itemHandler.invalidate();
		}
	}
}

This works fine, but leaving the game makes it reset. How do I save it?

Link to comment
Share on other sites

Considering that you did not put any code in the read and write methods 

dealing with energy, I'm not sure why you thought it would magically work. 

 

Also, this:

44 minutes ago, TallYate said:

this.itemHandler.ifPresent(handler -> {

Is completely unnecessary. You already have access to it:

44 minutes ago, TallYate said:

private IItemHandlerModifiable items

Just access that. 

 

Also, why so you have this? 

Quote

private NonNullList<ItemStack> generatorContents

You have an ItemStackHandler....

 

Related, you called your LazyOptional for your items, "itemHandler" but the one for energy "energyHolder"

Pick a naming convention and stick to it.

  

43 minutes ago, TallYate said:

if (itemHandler != null) {

    itemHandler.invalidate();

}

...But you're not invalidating your energy's LazyOptional...Also, you know for a fact that it's not null...

Edited by Draco18s

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

(Hooray, forum glitches)

Edited by Draco18s

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

@Override
	public CompoundNBT write(CompoundNBT compound) {
		super.write(compound);
		if (!this.checkLootAndWrite(compound)) {
			ItemStackHelper.saveAllItems(compound, this.generatorContents);
		}
		compound.putInt("Energy", this.energy.getEnergyStored());
		CrudeTechMod.log("wrote Energy: " + Integer.toString(this.energy.getEnergyStored()));
		compound.putInt("BurnTime", this.burnTime);
		CrudeTechMod.log("wrote BurnTime: " + Integer.toString(this.burnTime));
		return compound;
	}

	@Override
	public void read(CompoundNBT compound) {
		super.read(compound);
		this.generatorContents = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY);
		if (!this.checkLootAndRead(compound)) {
			ItemStackHelper.loadAllItems(compound, this.generatorContents);
		}
		this.energy.setEnergy(compound.getInt("Energy"));
		CrudeTechMod.log("read Energy: " + Integer.toString(compound.getInt("Energy")));
		
		
		this.burnTime = compound.getInt("BurnTime");
		CrudeTechMod.log("read BurnTime: " + Integer.toString(compound.getInt("BurnTime")));
	}

https://hatebin.com/dibtadlfnm - for full code
This is the log when I leave:

wrote Energy: 1140
wrote BurnTime: 186


This is the log when I join:

�[m�[32m[11:47:55] [Server thread/INFO] [minecraft/MinecraftServer]: Preparing start region for dimension minecraft:overworld
�[m�[32m[11:47:55] [Server thread/INFO] [me.jo.cr.CrudeTechMod/]: read Energy: 1140
�[m�[32m[11:47:55] [Server thread/INFO] [me.jo.cr.CrudeTechMod/]: read BurnTime: 186
�[m�[32m[11:47:55] [Render thread/INFO] [minecraft/LoggingChunkStatusListener]: Preparing spawn area: 0%
�[m�[36m[11:47:55] [Server thread/DEBUG] [ne.mi.co.DimensionManager/DIMS]: Queueing dimension -1 to unload
�[m�[36m[11:47:55] [Server thread/DEBUG] [ne.mi.co.DimensionManager/DIMS]: Queueing dimension 1 to unload
�[m�[32m[11:47:55] [Render thread/INFO] [minecraft/LoggingChunkStatusListener]: Time elapsed: 24 ms
�[m�[36m[11:47:55] [Server thread/DEBUG] [ne.mi.co.DimensionManager/DIMS]: Unloading dimension -1
�[m�[32m[11:47:55] [Server thread/INFO] [minecraft/ChunkManager]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
�[m�[36m[11:47:55] [Server thread/DEBUG] [ne.mi.co.DimensionManager/DIMS]: Unloading dimension 1
�[m�[32m[11:47:55] [Server thread/INFO] [minecraft/ChunkManager]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
�[m�[32m[11:47:55] [Server thread/INFO] [minecraft/IntegratedServer]: Changing view distance to 11, from 10
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Starting local connection.
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Starting local connection.
�[m�[36m[11:47:55] [Server thread/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Sending ticking packet info 'net.minecraftforge.fml.network.FMLHandshakeMessages$S2CModList' to 'fml:handshake' sequence 0
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.FMLLoginWrapper/FMLHANDSHAKE]: Recieved login wrapper packet event for channel fml:handshake with index 0
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Logging into server with mod list [minecraft, forge, crudetech]
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'fml:loginwrapper' : Version test of 'FML2' from server : ACCEPTED
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'fml:handshake' : Version test of 'FML2' from server : ACCEPTED
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'minecraft:unregister' : Version test of 'FML2' from server : ACCEPTED
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'fml:play' : Version test of 'FML2' from server : ACCEPTED
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'minecraft:register' : Version test of 'FML2' from server : ACCEPTED
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'crudetech:main' : Version test of '1' from server : ACCEPTED
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Accepting channel list from server
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.FMLLoginWrapper/FMLHANDSHAKE]: Dispatching wrapped packet reply for channel fml:handshake with index 0
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Accepted server connection
�[m�[36m[11:47:55] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/REGISTRIES]: Expecting 19 registries: [minecraft:recipe_serializer, minecraft:sound_event, minecraft:particle_type, minecraft:villager_profession, minecraft:item, minecraft:potion, minecraft:block_entity_type, minecraft:block, minecraft:mob_effect, minecraft:stat_type, forge:moddimensions, minecraft:biome, minecraft:menu, minecraft:enchantment, minecraft:motive, minecraft:feature, minecraft:dataserializers, minecraft:fluid, minecraft:entity_type]
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.FMLLoginWrapper/FMLHANDSHAKE]: Recieved login wrapper packet event for channel fml:handshake with index 0
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Received client indexed reply 0 of type net.minecraftforge.fml.network.FMLHandshakeMessages$C2SModListReply
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Received client connection with modlist [minecraft, forge, crudetech]
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'fml:loginwrapper' : Version test of 'FML2' from client : ACCEPTED
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'fml:handshake' : Version test of 'FML2' from client : ACCEPTED
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'minecraft:unregister' : Version test of 'FML2' from client : ACCEPTED
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'fml:play' : Version test of 'FML2' from client : ACCEPTED
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'minecraft:register' : Version test of 'FML2' from client : ACCEPTED
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Channel 'crudetech:main' : Version test of '1' from client : ACCEPTED
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.NetworkRegistry/NETREGISTRY]: Accepting channel list from client
�[m�[36m[11:47:55] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Accepted client connection mod list
�[m�[36m[11:47:56] [Server thread/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Sending ticking packet info 'Config forge-server.toml' to 'fml:handshake' sequence 1
�[m�[36m[11:47:56] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.FMLLoginWrapper/FMLHANDSHAKE]: Recieved login wrapper packet event for channel fml:handshake with index 1
�[m�[36m[11:47:56] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Received config sync from server
�[m�[36m[11:47:56] [Netty Local Client IO #3/DEBUG] [ne.mi.fm.ne.FMLLoginWrapper/FMLHANDSHAKE]: Dispatching wrapped packet reply for channel fml:handshake with index 1
�[m�[36m[11:47:56] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.FMLLoginWrapper/FMLHANDSHAKE]: Recieved login wrapper packet event for channel fml:handshake with index 1
�[m�[36m[11:47:56] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Received client indexed reply 1 of type net.minecraftforge.fml.network.FMLHandshakeMessages$C2SAcknowledge
�[m�[36m[11:47:56] [Netty Server IO #7/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Received acknowledgement from client
�[m�[36m[11:47:56] [Server thread/DEBUG] [ne.mi.fm.ne.FMLHandshakeHandler/FMLHANDSHAKE]: Handshake complete!
�[m�[32m[11:47:56] [Netty Local Client IO #3/INFO] [ne.mi.fm.ne.NetworkHooks/]: Connected to a modded server.
�[m�[32m[11:47:56] [Server thread/INFO] [ne.mi.co.AdvancementLoadFix/]: Using new advancement loading for net.minecraft.advancements.PlayerAdvancements@3c9585f4
�[m�[32m[11:47:56] [Server thread/INFO] [minecraft/PlayerList]: Dev[local:E:2aae80c9] logged in with entity id 299 at (49.53500465260246, 4.0, -183.17275828733068)
�[m�[32m[11:47:56] [Server thread/INFO] [minecraft/MinecraftServer]: Dev joined the game
�[m�[32m[11:47:56] [Render thread/INFO] [me.jo.cr.CrudeTechMod/]: read Energy: 0
�[m�[32m[11:47:56] [Render thread/INFO] [me.jo.cr.CrudeTechMod/]: read BurnTime: 0


Do you know why the read method is getting the wrong numbers?
 

Edited by TallYate
made log better (I had multiple in 1 world, making it confusing)
Link to comment
Share on other sites

public class GeneratorPacket {
	public final int energy;
	public final int burnTime;
	public final boolean fromServer;
	public final BlockPos pos;

	public GeneratorPacket(int energy, int burnTime, boolean fromServer, BlockPos pos) {
		this.energy = energy;
		this.burnTime = burnTime;
		this.fromServer = fromServer;
		this.pos = pos;
	}

	public static void encode(GeneratorPacket msg, PacketBuffer buf) {
		buf.writeInt(msg.energy);
		buf.writeInt(msg.burnTime);
		buf.writeBoolean(msg.fromServer);
		buf.writeBlockPos(msg.pos);
	}

	public static GeneratorPacket decode(PacketBuffer buf) {
		return new GeneratorPacket(buf.readInt(), buf.readInt(), buf.readBoolean(), buf.readBlockPos());
	}

	public static void handle(GeneratorPacket msg, Supplier<NetworkEvent.Context> ctx) {
		ctx.get().enqueueWork(() -> {
			TileEntity te = ctx.get().getSender().world.getTileEntity(msg.pos);
			if(msg.fromServer) {
				if(te instanceof FurnaceGeneratorTileEntity) {
					FurnaceGeneratorTileEntity gen = (FurnaceGeneratorTileEntity) te;
					int energy = gen.getEnergy();
					int burnTime = gen.getBurnTime();
					PacketTarget target = PacketDistributor.PLAYER.with(() -> ctx.get().getSender());
					INSTANCE.send(target, new GeneratorPacket(energy, burnTime, true, msg.pos));
				}
			}
			else if(te instanceof FurnaceGeneratorTileEntity){
				FurnaceGeneratorTileEntity gen = (FurnaceGeneratorTileEntity) te;
				gen.setEnergy(msg.energy);
				gen.setBurnTime(msg.burnTime);
			}
		});
		ctx.get().setPacketHandled(true);
	}

	private static final String PROTOCOL_VERSION = "1";
	public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel(
			new ResourceLocation(CrudeTechMod.MOD_ID, "generator_packet"), () -> PROTOCOL_VERSION,
			PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals);
	public static int i = 0;
}
@Override
	public CompoundNBT write(CompoundNBT compound) {
		super.write(compound);
		if (!this.checkLootAndWrite(compound)) {
			ItemStackHelper.saveAllItems(compound, this.generatorContents);
		}
		if (this.world.isRemote) {
			GeneratorPacket.INSTANCE
					.sendToServer(new GeneratorPacket(this.energy.getEnergyStored(), this.burnTime, false, this.pos));
		}
		compound.putInt("Energy", this.energy.getEnergyStored());
		compound.putInt("BurnTime", this.burnTime);
		CrudeTechMod.log((this.world.isRemote ? "Client-Side " : "Server-Side ") + "wrote Energy: "
				+ Integer.toString(compound.getInt("Energy")));
		CrudeTechMod.log((this.world.isRemote ? "Client-Side " : "Server-Side ") + "wrote BurnTime: "
				+ Integer.toString(compound.getInt("BurnTime")));
		return compound;
	}

I tried using packets but now the log says this

[m[1;31m[15:53:07] [Server thread/ERROR] [minecraft/TileEntity]: Failed to load data for block entity crudetech:furnace_generator
java.lang.NullPointerException: null
	at me.joshua.crudetechmod.Blocks.FurnaceGeneratorTileEntity.read(FurnaceGeneratorTileEntity.java:177) ~[?:?] {re:classloading}
	at net.minecraft.tileentity.TileEntity.lambda$create$1(TileEntity.java:95) ~[?:?] {re:classloading}
	at java.util.Optional.map(Unknown Source) ~[?:1.8.0_231] {}
	at net.minecraft.tileentity.TileEntity.create(TileEntity.java:93) ~[?:?] {re:classloading}
	at net.minecraft.world.chunk.storage.ChunkSerializer.readEntities(ChunkSerializer.java:395) ~[?:?] {re:classloading}
	at net.minecraft.world.chunk.storage.ChunkSerializer.lambda$read$2(ChunkSerializer.java:132) ~[?:?] {re:classloading}
	at net.minecraft.world.chunk.Chunk.postLoad(Chunk.java:470) ~[?:?] {re:classloading}
	at net.minecraft.world.server.ChunkManager.lambda$null$25(ChunkManager.java:593) ~[?:?] {re:classloading}
	at com.mojang.datafixers.util.Either.lambda$mapLeft$0(Either.java:162) ~[datafixerupper-2.0.24.jar:?] {}
	at com.mojang.datafixers.util.Either$Left.map(Either.java:38) ~[datafixerupper-2.0.24.jar:?] {}
	at com.mojang.datafixers.util.Either.mapLeft(Either.java:162) ~[datafixerupper-2.0.24.jar:?] {}
	at net.minecraft.world.server.ChunkManager.lambda$func_219200_b$26(ChunkManager.java:580) ~[?:?] {re:classloading}
	at java.util.concurrent.CompletableFuture.uniApply(Unknown Source) ~[?:1.8.0_231] {}
	at java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source) ~[?:1.8.0_231] {}
	at java.util.concurrent.CompletableFuture$Completion.run(Unknown Source) ~[?:1.8.0_231] {}
	at net.minecraft.world.chunk.ChunkTaskPriorityQueueSorter.lambda$null$1(ChunkTaskPriorityQueueSorter.java:44) ~[?:?] {re:classloading}
	at net.minecraft.util.concurrent.ThreadTaskExecutor.run(ThreadTaskExecutor.java:140) [?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.server.ServerChunkProvider$ChunkExecutor.run(ServerChunkProvider.java:513) [?:?] {re:classloading}
	at net.minecraft.util.concurrent.ThreadTaskExecutor.driveOne(ThreadTaskExecutor.java:110) [?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.server.ServerChunkProvider$ChunkExecutor.driveOne(ServerChunkProvider.java:521) [?:?] {re:classloading}
	at net.minecraft.world.server.ServerChunkProvider.driveOneTask(ServerChunkProvider.java:272) [?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.driveOneInternal(MinecraftServer.java:747) [?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.driveOne(MinecraftServer.java:736) [?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.util.concurrent.ThreadTaskExecutor.driveUntil(ThreadTaskExecutor.java:123) [?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.runScheduledTasks(MinecraftServer.java:722) [?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.loadInitialChunks(MinecraftServer.java:477) [?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:83) [?:?] {re:classloading,pl:runtimedistcleaner:A}
	at net.minecraft.server.integrated.IntegratedServer.init(IntegratedServer.java:99) [?:?] {re:classloading,pl:runtimedistcleaner:A}
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:638) [?:?] {re:classloading,pl:accesstransformer:B}

and skips loading my tileEntity

This is the line it is referring to

CrudeTechMod.log((this.world.isRemote ? "Client-Side " : "Server-Side ") + "wrote Energy: "
                + Integer.toString(compound.getInt("Energy")));

So I removed the loggers, because maybe it can't get the world when it's not loaded?
But the energy was still not synced

Link to comment
Share on other sites

If your block was already in a world and you loaded it, the saved data no longer matches the data you're trying to read.
Create a new world.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Jesus H Christ on a crutch and the Holy Mother of God.

A NEW SAVE FILE

  • Haha 2

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Dev joined the game
[m[32m[21:54:58] [Server thread/INFO] [minecraft/IntegratedServer]: Saving and pausing game...
[m[32m[21:54:58] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'New World'/minecraft:overworld
[m[32m[21:54:58] [Server thread/INFO] [me.jo.cr.CrudeTechMod/]: Server-Side wrote Energy: 0
[m[32m[21:54:58] [Server thread/INFO] [me.jo.cr.CrudeTechMod/]: Server-Side wrote BurnTime: 0
[m[32m[21:54:58] [Render thread/INFO] [me.jo.cr.CrudeTechMod/]: sent packet
[m[32m[21:54:58] [Render thread/INFO] [me.jo.cr.CrudeTechMod/]: Client-Side read Energy: 0
[m[32m[21:54:58] [Render thread/INFO] [me.jo.cr.CrudeTechMod/]: Client-Side read BurnTime: 0
[m[32m[21:54:58] [Render thread/INFO] [minecraft/AdvancementList]: Loaded 13 advancements
[m[33m[21:54:58] [Render thread/WARN] [minecraft/SoundEngine]: Unable to play empty soundEvent: minecraft:entity.slime.squish_small
[m[36m[21:54:59] [Server thread/DEBUG] [ne.mi.fm.FMLWorldPersistenceHook/WP]: Gathering id map for writing to world save New World
[m[32m[21:54:59] [Server thread/INFO] [me.jo.cr.CrudeTechMod/]: Energy: 0, BurnTime: 0
[m[32m[21:54:59] [Server thread/INFO] [me.jo.cr.CrudeTechMod/]: sender is null, side is Client
[m[32m[21:54:59] [Render thread/INFO] [me.jo.cr.CrudeTechMod/]: sender is null, side is Server

https://github.com/TallYate/CrudeTechMod/tree/master/src/main/java/me/joshua/crudetechmod
The packet is sent once from the Client-Side read method in the tileEntity. But the handler is done twice, from both sides. It should only run server side if the sender is not null. Why does this happen?

image.png

Link to comment
Share on other sites

					if (ctx.get().getSender() != null) {
						...
					}
					CrudeTechMod.log("sender is null, side is " + (msg.fromServer?"Server":"Client"));
		if (this.world.isRemote) {
			GeneratorPacket.INSTANCE
					.sendToServer(new GeneratorPacket(this.energy.getEnergyStored(), this.burnTime, false, this.pos));
		}
INSTANCE.send(target, new GeneratorPacket(energy, burnTime, true, msg.pos));

 

Link to comment
Share on other sites

why are you sending from client

you should never do that because the client can be cheating

ctx.get().getSender()

the sender is only null on the client for that you can use Minecraft.Instance.player (can not be correct)

 

why are you sending a packet from readNBT?

 

the client doesnt save date so sending in readNBT to the server will reset the data on the server

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.