Jump to content

TallYate

Members
  • Posts

    141
  • Joined

  • Last visited

Everything posted by TallYate

  1. I have created a custom inventory. I want to have a method run whenever an item is changed. How would I do that?
  2. 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
  3. 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));
  4. 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.
  5. 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?
  6. So I can get the energy level from the server and send it back to the client
  7. 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?
  8. 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
  9. 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?
  10. @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?
  11. Yeah I got your notification twice. Thank you for your reply!
  12. 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?
  13. Yes, if you saw the red text at the top earlier today
  14. Oh sorry I think the forums glitched or something because I said that earlier in the thread
  15. It contains knockback, and it messes with the super knockback that I am using
  16. It contains knockback, and it messes with the super knockback that I am using
  17. @Override public IntNBT serializeNBT() { int a = 0; getCapability(ModCapabilityEnergy.ENERGY, null).ifPresent(handler -> { a = handler.getEnergyStored(); }); return IntNBT.valueOf(a); } This doesn't work so I did that bad thing. Is there a better way that you know of?
  18. I would like to use an Access Transformer to use LivingEntity#damageEntity I think this is the problem: C:\Users\me\eclipse-workspace\CrudeTechMod\build\tmp\expandedArchives\forge-1.15.2-31.2.0_mapped_snapshot_20200514-1.15.1-sources.jar_ce97d4795e289d120401b6dd4e80c901\net\minecraft\entity\player\PlayerEntity.java:975: error: damageEntity(DamageSource,float) in PlayerEntity cannot override damageEntity(DamageSource,float) in LivingEntity protected void damageEntity(DamageSource damageSrc, float damageAmount) { ^ attempting to assign weaker access privileges; was public C:\Users\me\eclipse-workspace\CrudeTechMod\build\tmp\expandedArchives\forge-1.15.2-31.2.0_mapped_snapshot_20200514-1.15.1-sources.jar_ce97d4795e289d120401b6dd4e80c901\net\minecraft\client\entity\player\ClientPlayerEntity.java:324: error: damageEntity(DamageSource,float) in ClientPlayerEntity cannot override damageEntity(DamageSource,float) in LivingEntit protected void damageEntity(DamageSource damageSrc, float damageAmount) { ^ attempting to assign weaker access privileges; was public After I do gradlew genEclipseRuns --refresh-dependencies && gradlew eclipse It breaks all my imports accesstransformer.cfg public net.minecraft.entity.LivingEntity func_70665_d(Lnet/minecraft/util/DamageSource;F)V # damageEntity I haven't posted the full thing because I can't copy-paste the whole cmd
  19. But yes you are correct, I entered creative to test it, but didn't realize that ItemStack#damageItem doesn't damage in creative! Thanks!
×
×
  • Create New...

Important Information

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