Made the chunkloader work

This commit is contained in:
modmuss50 2019-08-30 17:53:46 +01:00
parent adebb34a03
commit 3f4e53e259
5 changed files with 74 additions and 9 deletions

View file

@ -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 {

View file

@ -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);
}
}

View file

@ -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<BuiltContainer> {
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<BuiltContainer> {
}
public void onClick(int amount){
NetworkManager.sendToServer(ServerboundPackets.createPacketChunkloader(amount, blockEntity));
NetworkManager.sendToServer(ServerboundPackets.createPacketChunkloader(amount, blockEntity, ClientChunkManager.hasChunksForLoader(blockEntity.getPos())));
}
}

View file

@ -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;

View file

@ -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<ServerPlayPacketListener> createPacketChunkloader(int buttonID, ChunkLoaderBlockEntity blockEntity) {
public static Packet<ServerPlayPacketListener> createPacketChunkloader(int buttonID, ChunkLoaderBlockEntity blockEntity, boolean sync) {
return NetworkManager.createServerBoundPacket(CHUNKLOADER, extendedPacketBuffer -> {
extendedPacketBuffer.writeBlockPos(blockEntity.getPos());
extendedPacketBuffer.writeInt(buttonID);
extendedPacketBuffer.writeBoolean(sync);
});
}