Made the chunkloader work
This commit is contained in:
parent
adebb34a03
commit
3f4e53e259
5 changed files with 74 additions and 9 deletions
|
@ -44,6 +44,7 @@ import techreborn.init.*;
|
||||||
import techreborn.packets.ClientboundPackets;
|
import techreborn.packets.ClientboundPackets;
|
||||||
import techreborn.packets.ServerboundPackets;
|
import techreborn.packets.ServerboundPackets;
|
||||||
import techreborn.utils.BehaviorDispenseScrapbox;
|
import techreborn.utils.BehaviorDispenseScrapbox;
|
||||||
|
import reborncore.common.chunkloading.ChunkLoaderManager;
|
||||||
import techreborn.world.WorldGenerator;
|
import techreborn.world.WorldGenerator;
|
||||||
|
|
||||||
public class TechReborn implements ModInitializer {
|
public class TechReborn implements ModInitializer {
|
||||||
|
|
|
@ -24,10 +24,16 @@
|
||||||
|
|
||||||
package techreborn.blockentity.machine.tier3;
|
package techreborn.blockentity.machine.tier3;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
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.util.math.Direction;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import reborncore.api.IToolDrop;
|
import reborncore.api.IToolDrop;
|
||||||
import reborncore.api.blockentity.InventoryProvider;
|
import reborncore.api.blockentity.InventoryProvider;
|
||||||
import reborncore.client.containerBuilder.IContainerProvider;
|
import reborncore.client.containerBuilder.IContainerProvider;
|
||||||
|
@ -38,6 +44,9 @@ import reborncore.common.util.RebornInventory;
|
||||||
import techreborn.config.TechRebornConfig;
|
import techreborn.config.TechRebornConfig;
|
||||||
import techreborn.init.TRBlockEntities;
|
import techreborn.init.TRBlockEntities;
|
||||||
import techreborn.init.TRContent;
|
import techreborn.init.TRContent;
|
||||||
|
import reborncore.common.chunkloading.ChunkLoaderManager;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements IToolDrop, InventoryProvider, IContainerProvider {
|
public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements IToolDrop, InventoryProvider, IContainerProvider {
|
||||||
|
|
||||||
|
@ -49,7 +58,7 @@ public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements
|
||||||
this.radius = 1;
|
this.radius = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleGuiInputFromClient(int buttonID) {
|
public void handleGuiInputFromClient(int buttonID, @Nullable PlayerEntity playerEntity) {
|
||||||
radius += buttonID;
|
radius += buttonID;
|
||||||
|
|
||||||
if (radius > TechRebornConfig.chunkLoaderMaxRadius) {
|
if (radius > TechRebornConfig.chunkLoaderMaxRadius) {
|
||||||
|
@ -58,6 +67,13 @@ public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements
|
||||||
if (radius <= 1) {
|
if (radius <= 1) {
|
||||||
radius = 1;
|
radius = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reload();
|
||||||
|
|
||||||
|
if(playerEntity != null){
|
||||||
|
ChunkLoaderManager manager = ChunkLoaderManager.get(getWorld());
|
||||||
|
manager.syncChunkLoaderToClient((ServerPlayerEntity) playerEntity, getPos());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -65,10 +81,51 @@ public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements
|
||||||
return TRContent.Machine.CHUNK_LOADER.getStack();
|
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
|
@Override
|
||||||
public void tick() {
|
public void onBreak(World world, PlayerEntity playerEntity, BlockPos blockPos, BlockState blockState) {
|
||||||
super.tick();
|
if(world.isClient){
|
||||||
// TODO: chunkload
|
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
|
@Override
|
||||||
|
@ -129,4 +186,5 @@ public class ChunkLoaderBlockEntity extends PowerAcceptorBlockEntity implements
|
||||||
return new ContainerBuilder("chunkloader").player(player.inventory).inventory().hotbar().addInventory()
|
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);
|
.blockEntity(this).energySlot(0, 8, 72).syncEnergyValue().syncIntegerValue(this::getRadius, this::setRadius).addInventory().create(this, syncID);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,10 @@
|
||||||
package techreborn.client.gui;
|
package techreborn.client.gui;
|
||||||
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import reborncore.client.ClientChunkManager;
|
||||||
import reborncore.client.containerBuilder.builder.BuiltContainer;
|
import reborncore.client.containerBuilder.builder.BuiltContainer;
|
||||||
import reborncore.client.gui.builder.GuiBase;
|
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;
|
||||||
import reborncore.client.gui.builder.widget.GuiButtonUpDown.UpDownButtonType;
|
import reborncore.client.gui.builder.widget.GuiButtonUpDown.UpDownButtonType;
|
||||||
import reborncore.common.network.NetworkManager;
|
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 + 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 + 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 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
|
@Override
|
||||||
|
@ -73,6 +77,6 @@ public class GuiChunkLoader extends GuiBase<BuiltContainer> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onClick(int amount){
|
public void onClick(int amount){
|
||||||
NetworkManager.sendToServer(ServerboundPackets.createPacketChunkloader(amount, blockEntity));
|
NetworkManager.sendToServer(ServerboundPackets.createPacketChunkloader(amount, blockEntity, ClientChunkManager.hasChunksForLoader(blockEntity.getPos())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -321,7 +321,7 @@ public class TechRebornConfig {
|
||||||
public static int chunkLoaderMaxEnergy = 10_000;
|
public static int chunkLoaderMaxEnergy = 10_000;
|
||||||
|
|
||||||
@Config(config = "machines", category = "chunk_loader", key = "ChunkLoaderMaxRadius", comment = "Chunk Loader Max Radius")
|
@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)")
|
@Config(config = "machines", category = "assembling_machine", key = "AssemblingMachineMaxInput", comment = "Assembling Machine Max Input (Value in EU)")
|
||||||
public static int assemblingMachineMaxInput = 128;
|
public static int assemblingMachineMaxInput = 128;
|
||||||
|
|
|
@ -131,11 +131,12 @@ public class ServerboundPackets {
|
||||||
registerPacketHandler(CHUNKLOADER, (extendedPacketBuffer, context) -> {
|
registerPacketHandler(CHUNKLOADER, (extendedPacketBuffer, context) -> {
|
||||||
BlockPos pos = extendedPacketBuffer.readBlockPos();
|
BlockPos pos = extendedPacketBuffer.readBlockPos();
|
||||||
int buttonID = extendedPacketBuffer.readInt();
|
int buttonID = extendedPacketBuffer.readInt();
|
||||||
|
boolean sync = extendedPacketBuffer.readBoolean();
|
||||||
|
|
||||||
context.getTaskQueue().execute(() -> {
|
context.getTaskQueue().execute(() -> {
|
||||||
BlockEntity blockEntity = context.getPlayer().world.getBlockEntity(pos);
|
BlockEntity blockEntity = context.getPlayer().world.getBlockEntity(pos);
|
||||||
if (blockEntity instanceof ChunkLoaderBlockEntity) {
|
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 -> {
|
return NetworkManager.createServerBoundPacket(CHUNKLOADER, extendedPacketBuffer -> {
|
||||||
extendedPacketBuffer.writeBlockPos(blockEntity.getPos());
|
extendedPacketBuffer.writeBlockPos(blockEntity.getPos());
|
||||||
extendedPacketBuffer.writeInt(buttonID);
|
extendedPacketBuffer.writeInt(buttonID);
|
||||||
|
extendedPacketBuffer.writeBoolean(sync);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue