TallYate
Members-
Posts
141 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
TallYate's Achievements
Creeper Killer (4/8)
0
Reputation
-
Thank you, that works!
-
https://github.com/TallYate/CrudeTechMod/blob/master/src/main/java/me/joshua/crudetechmod/Blocks/FurnaceGeneratorBlock.java The DeferredRegisters and RegistryObjects are here https://github.com/TallYate/CrudeTechMod/tree/master/src/main/java/me/joshua/crudetechmod/Init
-
It only happens when I break the generator though. If it was tied to the wrong block, I think it would also give that error when I place the generator. Here is when it is registered public static final RegistryObject<TileEntityType<FurnaceGeneratorTileEntity>> FURNACE_GENERATOR = TILE_ENTITY_TYPES.register("furnace_generator", () -> TileEntityType.Builder.create(FurnaceGeneratorTileEntity::new, ModBlocks.FURNACE_GENERATOR.get()).build(null));
-
https://github.com/TallYate/CrudeTechMod/blob/master/src/main/java/me/joshua/crudetechmod/Blocks/FurnaceGeneratorTileEntity.java When I break the generator, the blocks reset and drop, but the energy and burnTime remain the same, how do I make them reset as well? Also, when breaking a furnace generator in a new location, it says: "Block entity invalid: crudetech:furnace_generator @ BlockPos{x=288, y=4, z=169}" but only once per location so I think I might be removing the tileEntity the wrong way.
-
I tried putting the packet in the @Override openInventory, but it never runs. Is there a way to make the packet output something and have it stored where you call it?
-
So I can get the energy level from the server and send it back to the client
-
What are you saying?
-
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?
-
-
Create a new world?
-
Create a new world?
-
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
-
https://github.com/TallYate/CrudeTechMod/tree/master/src/main I added a way for it to charge items, and it charges more than it displays. Maybe the client and server are desynced? And I should send packets?
-
<removed>