From 3f4e53e259b0e5997887e922ccc9c4c2b1967717 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Fri, 30 Aug 2019 17:53:46 +0100 Subject: [PATCH] Made the chunkloader work --- src/main/java/techreborn/TechReborn.java | 1 + .../machine/tier3/ChunkLoaderBlockEntity.java | 68 +++++++++++++++++-- .../techreborn/client/gui/GuiChunkLoader.java | 6 +- .../techreborn/config/TechRebornConfig.java | 2 +- .../packets/ServerboundPackets.java | 6 +- 5 files changed, 74 insertions(+), 9 deletions(-) diff --git a/src/main/java/techreborn/TechReborn.java b/src/main/java/techreborn/TechReborn.java index 20b0e4f4c..feace7bde 100644 --- a/src/main/java/techreborn/TechReborn.java +++ b/src/main/java/techreborn/TechReborn.java @@ -44,6 +44,7 @@ import techreborn.init.*; import techreborn.packets.ClientboundPackets; import techreborn.packets.ServerboundPackets; import techreborn.utils.BehaviorDispenseScrapbox; +import reborncore.common.chunkloading.ChunkLoaderManager; import techreborn.world.WorldGenerator; public class TechReborn implements ModInitializer { diff --git a/src/main/java/techreborn/blockentity/machine/tier3/ChunkLoaderBlockEntity.java b/src/main/java/techreborn/blockentity/machine/tier3/ChunkLoaderBlockEntity.java index aaac171d1..84c4492b5 100644 --- a/src/main/java/techreborn/blockentity/machine/tier3/ChunkLoaderBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/tier3/ChunkLoaderBlockEntity.java @@ -24,10 +24,16 @@ package techreborn.blockentity.machine.tier3; +import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.Direction; +import net.minecraft.world.World; import reborncore.api.IToolDrop; import reborncore.api.blockentity.InventoryProvider; import reborncore.client.containerBuilder.IContainerProvider; @@ -38,6 +44,9 @@ import reborncore.common.util.RebornInventory; import techreborn.config.TechRebornConfig; import techreborn.init.TRBlockEntities; import techreborn.init.TRContent; +import reborncore.common.chunkloading.ChunkLoaderManager; + +import javax.annotation.Nullable; public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements IToolDrop, InventoryProvider, IContainerProvider { @@ -49,7 +58,7 @@ public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements this.radius = 1; } - public void handleGuiInputFromClient(int buttonID) { + public void handleGuiInputFromClient(int buttonID, @Nullable PlayerEntity playerEntity) { radius += buttonID; if (radius > TechRebornConfig.chunkLoaderMaxRadius) { @@ -58,17 +67,65 @@ public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements if (radius <= 1) { radius = 1; } + + reload(); + + if(playerEntity != null){ + ChunkLoaderManager manager = ChunkLoaderManager.get(getWorld()); + manager.syncChunkLoaderToClient((ServerPlayerEntity) playerEntity, getPos()); + } } @Override public ItemStack getToolDrop(final PlayerEntity entityPlayer) { return TRContent.Machine.CHUNK_LOADER.getStack(); } - + + private void reload(){ + unLoadAll(); + load(); + } + + private void load(){ + ChunkLoaderManager manager = ChunkLoaderManager.get(getWorld()); + ChunkPos rootPos = getChunkPos(); + int loadRadius = radius -1; + for (int i = -loadRadius; i <= loadRadius; i++) { + for (int j = -loadRadius; j <= loadRadius; j++) { + ChunkPos loadPos = new ChunkPos(rootPos.x + i, rootPos.z + j); + + if(!manager.isChunkLoaded(getWorld(), loadPos, getPos())){ + manager.loadChunk(getWorld(), loadPos, getPos(), "todo"); + } + } + } + } + + @Override - public void tick() { - super.tick(); - // TODO: chunkload + public void onBreak(World world, PlayerEntity playerEntity, BlockPos blockPos, BlockState blockState) { + if(world.isClient){ + return; + } + unLoadAll(); + ChunkLoaderManager.get(world).clearClient((ServerPlayerEntity) playerEntity); + } + + @Override + public void onPlace(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { + if(world.isClient){ + return; + } + reload(); + } + + private void unLoadAll(){ + ChunkLoaderManager manager = ChunkLoaderManager.get(world); + manager.unloadChunkLoader(world, getPos()); + } + + public ChunkPos getChunkPos(){ + return new ChunkPos(getPos()); } @Override @@ -129,4 +186,5 @@ public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements return new ContainerBuilder("chunkloader").player(player.inventory).inventory().hotbar().addInventory() .blockEntity(this).energySlot(0, 8, 72).syncEnergyValue().syncIntegerValue(this::getRadius, this::setRadius).addInventory().create(this, syncID); } + } diff --git a/src/main/java/techreborn/client/gui/GuiChunkLoader.java b/src/main/java/techreborn/client/gui/GuiChunkLoader.java index db0b9a68c..40c5c7bc2 100644 --- a/src/main/java/techreborn/client/gui/GuiChunkLoader.java +++ b/src/main/java/techreborn/client/gui/GuiChunkLoader.java @@ -25,8 +25,10 @@ package techreborn.client.gui; import net.minecraft.entity.player.PlayerEntity; +import reborncore.client.ClientChunkManager; import reborncore.client.containerBuilder.builder.BuiltContainer; import reborncore.client.gui.builder.GuiBase; +import reborncore.client.gui.builder.widget.GuiButtonSimple; import reborncore.client.gui.builder.widget.GuiButtonUpDown; import reborncore.client.gui.builder.widget.GuiButtonUpDown.UpDownButtonType; import reborncore.common.network.NetworkManager; @@ -48,6 +50,8 @@ public class GuiChunkLoader extends GuiBase { addButton(new GuiButtonUpDown(left + 64 + 12, top + 40, this, b -> onClick(1), UpDownButtonType.FORWARD)); addButton(new GuiButtonUpDown(left + 64 + 24, top + 40, this, b -> onClick(-1), UpDownButtonType.REWIND)); addButton(new GuiButtonUpDown(left + 64 + 36, top + 40, this, b -> onClick(-5), UpDownButtonType.FASTREWIND)); + + addButton(new GuiButtonSimple(left + 30, top + 70, 140, 20, "Toggle Loaded Chunks", b -> ClientChunkManager.toggleLoadedChunks(blockEntity.getPos()))); } @Override @@ -73,6 +77,6 @@ public class GuiChunkLoader extends GuiBase { } public void onClick(int amount){ - NetworkManager.sendToServer(ServerboundPackets.createPacketChunkloader(amount, blockEntity)); + NetworkManager.sendToServer(ServerboundPackets.createPacketChunkloader(amount, blockEntity, ClientChunkManager.hasChunksForLoader(blockEntity.getPos()))); } } diff --git a/src/main/java/techreborn/config/TechRebornConfig.java b/src/main/java/techreborn/config/TechRebornConfig.java index 636764fda..82ee85fc5 100644 --- a/src/main/java/techreborn/config/TechRebornConfig.java +++ b/src/main/java/techreborn/config/TechRebornConfig.java @@ -321,7 +321,7 @@ public class TechRebornConfig { public static int chunkLoaderMaxEnergy = 10_000; @Config(config = "machines", category = "chunk_loader", key = "ChunkLoaderMaxRadius", comment = "Chunk Loader Max Radius") - public static int chunkLoaderMaxRadius = 10; + public static int chunkLoaderMaxRadius = 5; @Config(config = "machines", category = "assembling_machine", key = "AssemblingMachineMaxInput", comment = "Assembling Machine Max Input (Value in EU)") public static int assemblingMachineMaxInput = 128; diff --git a/src/main/java/techreborn/packets/ServerboundPackets.java b/src/main/java/techreborn/packets/ServerboundPackets.java index eeed1032a..3b6a1e605 100644 --- a/src/main/java/techreborn/packets/ServerboundPackets.java +++ b/src/main/java/techreborn/packets/ServerboundPackets.java @@ -131,11 +131,12 @@ public class ServerboundPackets { registerPacketHandler(CHUNKLOADER, (extendedPacketBuffer, context) -> { BlockPos pos = extendedPacketBuffer.readBlockPos(); int buttonID = extendedPacketBuffer.readInt(); + boolean sync = extendedPacketBuffer.readBoolean(); context.getTaskQueue().execute(() -> { BlockEntity blockEntity = context.getPlayer().world.getBlockEntity(pos); if (blockEntity instanceof ChunkLoaderBlockEntity) { - ((ChunkLoaderBlockEntity) blockEntity).handleGuiInputFromClient(buttonID); + ((ChunkLoaderBlockEntity) blockEntity).handleGuiInputFromClient(buttonID, sync ? context.getPlayer() : null); } }); }); @@ -193,10 +194,11 @@ public class ServerboundPackets { }); } - public static Packet createPacketChunkloader(int buttonID, ChunkLoaderBlockEntity blockEntity) { + public static Packet createPacketChunkloader(int buttonID, ChunkLoaderBlockEntity blockEntity, boolean sync) { return NetworkManager.createServerBoundPacket(CHUNKLOADER, extendedPacketBuffer -> { extendedPacketBuffer.writeBlockPos(blockEntity.getPos()); extendedPacketBuffer.writeInt(buttonID); + extendedPacketBuffer.writeBoolean(sync); }); }