Merge pull request #7 from CinemaMod/format

Format
This commit is contained in:
GiantLuigi4 2023-11-11 18:05:22 -05:00 committed by GitHub
commit 3ca9f6ceb1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
115 changed files with 1377 additions and 1508 deletions

View File

@ -14,14 +14,18 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.server.ServerLifecycleHooks; import net.minecraftforge.server.ServerLifecycleHooks;
import net.montoyo.wd.core.HasAdvancement; import net.montoyo.wd.core.HasAdvancement;
import net.montoyo.wd.core.JSServerRequest; import net.montoyo.wd.core.JSServerRequest;
import net.montoyo.wd.data.GuiData; import net.montoyo.wd.data.GuiData;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.UUID; import java.util.UUID;
@ -58,7 +62,7 @@ public class SharedProxy {
Log.error("Called SharedProxy.displayGui() on server side..."); Log.error("Called SharedProxy.displayGui() on server side...");
} }
public void trackScreen(TileEntityScreen tes, boolean track) { public void trackScreen(ScreenBlockEntity tes, boolean track) {
} }
public void onAutocompleteResult(NameUUIDPair pairs[]) { public void onAutocompleteResult(NameUUIDPair pairs[]) {

View File

@ -42,16 +42,16 @@ import net.montoyo.wd.config.ClientConfig;
import net.montoyo.wd.config.CommonConfig; import net.montoyo.wd.config.CommonConfig;
import net.montoyo.wd.controls.ScreenControlRegistry; import net.montoyo.wd.controls.ScreenControlRegistry;
import net.montoyo.wd.core.*; import net.montoyo.wd.core.*;
import net.montoyo.wd.init.BlockInit; import net.montoyo.wd.registry.BlockRegistry;
import net.montoyo.wd.init.ItemInit; import net.montoyo.wd.registry.ItemRegistry;
import net.montoyo.wd.init.TabInit; import net.montoyo.wd.registry.WDTabs;
import net.montoyo.wd.init.TileInit; import net.montoyo.wd.registry.TileRegistry;
import net.montoyo.wd.miniserv.server.Server; import net.montoyo.wd.miniserv.server.Server;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.client_bound.S2CMessageServerInfo; import net.montoyo.wd.net.client_bound.S2CMessageServerInfo;
import net.montoyo.wd.utilities.DistSafety; import net.montoyo.wd.utilities.DistSafety;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import java.io.*; import java.io.*;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@ -130,10 +130,10 @@ public class WebDisplays {
WDNetworkRegistry.init(); WDNetworkRegistry.init();
SOUNDS.register(bus); SOUNDS.register(bus);
onRegisterSounds(); onRegisterSounds();
TabInit.init(bus); WDTabs.init(bus);
BlockInit.init(bus); BlockRegistry.init(bus);
ItemInit.init(bus); ItemRegistry.init(bus);
TileInit.init(bus); TileRegistry.init(bus);
PROXY.preInit(); PROXY.preInit();
@ -253,7 +253,7 @@ public class WebDisplays {
if(!ev.getEntity().level().isClientSide) { if(!ev.getEntity().level().isClientSide) {
ItemStack is = ev.getEntity().getItem(); ItemStack is = ev.getEntity().getItem();
if(is.getItem() == ItemInit.MINEPAD.get()) { if(is.getItem() == ItemRegistry.MINEPAD.get()) {
CompoundTag tag = is.getTag(); CompoundTag tag = is.getTag();
if(tag == null) { if(tag == null) {
@ -271,7 +271,7 @@ public class WebDisplays {
@SubscribeEvent @SubscribeEvent
public void onPlayerCraft(PlayerEvent.ItemCraftedEvent ev) { public void onPlayerCraft(PlayerEvent.ItemCraftedEvent ev) {
if(CommonConfig.hardRecipes && ItemInit.isCompCraftItem(ev.getCrafting().getItem()) && (CraftComponent.EXTCARD.makeItemStack().is(ev.getCrafting().getItem()))) { if(CommonConfig.hardRecipes && ItemRegistry.isCompCraftItem(ev.getCrafting().getItem()) && (CraftComponent.EXTCARD.makeItemStack().is(ev.getCrafting().getItem()))) {
if((ev.getEntity() instanceof ServerPlayer && !hasPlayerAdvancement((ServerPlayer) ev.getEntity(), ADV_PAD_BREAK)) || PROXY.hasClientPlayerAdvancement(ADV_PAD_BREAK) != HasAdvancement.YES) { if((ev.getEntity() instanceof ServerPlayer && !hasPlayerAdvancement((ServerPlayer) ev.getEntity(), ADV_PAD_BREAK)) || PROXY.hasClientPlayerAdvancement(ADV_PAD_BREAK) != HasAdvancement.YES) {
ev.getCrafting().setDamageValue(CraftComponent.BADEXTCARD.ordinal()); ev.getCrafting().setDamageValue(CraftComponent.BADEXTCARD.ordinal());

View File

@ -26,14 +26,13 @@ import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PacketDistributor;
import net.montoyo.wd.core.DefaultPeripheral; import net.montoyo.wd.core.DefaultPeripheral;
import net.montoyo.wd.entity.TileEntityKeyboard; import net.montoyo.wd.entity.KeyboardBlockEntity;
import net.montoyo.wd.item.ItemLinker; import net.montoyo.wd.item.ItemLinker;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.client_bound.S2CMessageCloseGui; import net.montoyo.wd.net.client_bound.S2CMessageCloseGui;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class BlockKeyboardLeft extends BlockPeripheral { public class KeyboardBlockLeft extends PeripheralBlock {
public static final EnumProperty<DefaultPeripheral> TYPE = EnumProperty.create("type", DefaultPeripheral.class); public static final EnumProperty<DefaultPeripheral> TYPE = EnumProperty.create("type", DefaultPeripheral.class);
public static final DirectionProperty FACING = DirectionProperty.create("facing", Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST); public static final DirectionProperty FACING = DirectionProperty.create("facing", Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST);
// public static final DirectionProperty HALF = DirectionProperty.create("facing", Direction.EAST, Direction.WEST); // public static final DirectionProperty HALF = DirectionProperty.create("facing", Direction.EAST, Direction.WEST);
@ -47,25 +46,25 @@ public class BlockKeyboardLeft extends BlockPeripheral {
private static final Property<?>[] properties = new Property<?>[] {TYPE, FACING}; private static final Property<?>[] properties = new Property<?>[] {TYPE, FACING};
public BlockKeyboardLeft() { public KeyboardBlockLeft() {
super(DefaultPeripheral.KEYBOARD); super(DefaultPeripheral.KEYBOARD);
} }
// TODO: make non static (for extensibility purposes) // TODO: make non static (for extensibility purposes)
public static TileEntityKeyboard getTileEntity(BlockState state, Level world, BlockPos pos) { public static KeyboardBlockEntity getTileEntity(BlockState state, Level world, BlockPos pos) {
if (state.getBlock() instanceof BlockKeyboardLeft) { if (state.getBlock() instanceof KeyboardBlockLeft) {
BlockEntity te = world.getBlockEntity(pos); // TODO: check? BlockEntity te = world.getBlockEntity(pos); // TODO: check?
if (te instanceof TileEntityKeyboard) if (te instanceof KeyboardBlockEntity)
return (TileEntityKeyboard) te; return (KeyboardBlockEntity) te;
} }
BlockPos relative = pos.relative(BlockKeyboardLeft.mapDirection(state.getValue(FACING).getOpposite())); BlockPos relative = pos.relative(KeyboardBlockLeft.mapDirection(state.getValue(FACING).getOpposite()));
BlockState ns = world.getBlockState(relative); BlockState ns = world.getBlockState(relative);
if (ns.getBlock() instanceof BlockPeripheral) { if (ns.getBlock() instanceof PeripheralBlock) {
BlockEntity te = world.getBlockEntity(relative); // TODO: check? BlockEntity te = world.getBlockEntity(relative); // TODO: check?
if (te instanceof TileEntityKeyboard) if (te instanceof KeyboardBlockEntity)
return (TileEntityKeyboard) te; return (KeyboardBlockEntity) te;
} }
return null; return null;
@ -90,7 +89,7 @@ public class BlockKeyboardLeft extends BlockPeripheral {
public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
double rpos = (entity.getY() - ((double) pos.getY())) * 16.0; double rpos = (entity.getY() - ((double) pos.getY())) * 16.0;
if (!world.isClientSide && rpos >= 1.0 && rpos <= 2.0 && Math.random() < 0.25) { if (!world.isClientSide && rpos >= 1.0 && rpos <= 2.0 && Math.random() < 0.25) {
TileEntityKeyboard tek = BlockKeyboardLeft.getTileEntity(state, world, pos); KeyboardBlockEntity tek = KeyboardBlockLeft.getTileEntity(state, world, pos);
if (tek != null) if (tek != null)
tek.simulateCat(entity); tek.simulateCat(entity);
@ -102,7 +101,7 @@ public class BlockKeyboardLeft extends BlockPeripheral {
if (player.getItemInHand(hand).getItem() instanceof ItemLinker) if (player.getItemInHand(hand).getItem() instanceof ItemLinker)
return InteractionResult.PASS; return InteractionResult.PASS;
TileEntityKeyboard tek = BlockKeyboardLeft.getTileEntity(state, level, pos); KeyboardBlockEntity tek = KeyboardBlockLeft.getTileEntity(state, level, pos);
if (tek != null) if (tek != null)
return tek.onRightClick(player, hand); return tek.onRightClick(player, hand);
@ -120,10 +119,10 @@ public class BlockKeyboardLeft extends BlockPeripheral {
} }
private static void removeRightPiece(BlockState state, Level world, BlockPos pos) { private static void removeRightPiece(BlockState state, Level world, BlockPos pos) {
BlockPos relative = pos.relative(BlockKeyboardLeft.mapDirection(state.getValue(FACING))); BlockPos relative = pos.relative(KeyboardBlockLeft.mapDirection(state.getValue(FACING)));
BlockState ns = world.getBlockState(relative); BlockState ns = world.getBlockState(relative);
if (ns.getBlock() instanceof BlockKeyboardRight) if (ns.getBlock() instanceof KeyboardBlockRight)
world.setBlock(relative, Blocks.AIR.defaultBlockState(), 3); world.setBlock(relative, Blocks.AIR.defaultBlockState(), 3);
} }

View File

@ -23,32 +23,31 @@ import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PacketDistributor;
import net.montoyo.wd.core.IPeripheral; import net.montoyo.wd.core.IPeripheral;
import net.montoyo.wd.entity.TileEntityKeyboard; import net.montoyo.wd.entity.KeyboardBlockEntity;
import net.montoyo.wd.item.ItemLinker; import net.montoyo.wd.item.ItemLinker;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.client_bound.S2CMessageCloseGui; import net.montoyo.wd.net.client_bound.S2CMessageCloseGui;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import static net.montoyo.wd.block.BlockKeyboardLeft.KEYBOARD_AABBS; import static net.montoyo.wd.block.KeyboardBlockLeft.KEYBOARD_AABBS;
import static net.montoyo.wd.block.BlockPeripheral.point; import static net.montoyo.wd.block.PeripheralBlock.point;
// TODO: merge into KeyboardLeft // TODO: merge into KeyboardLeft
public class BlockKeyboardRight extends Block implements IPeripheral { public class KeyboardBlockRight extends Block implements IPeripheral {
public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING;
public BlockKeyboardRight() { public KeyboardBlockRight() {
super(Properties.copy(Blocks.STONE) super(Properties.copy(Blocks.STONE)
.strength(1.5f, 10.f)); .strength(1.5f, 10.f));
} }
private static void removeLeftPiece(BlockState state, Level world, BlockPos pos) { private static void removeLeftPiece(BlockState state, Level world, BlockPos pos) {
BlockPos relative = pos.relative(BlockKeyboardLeft.mapDirection(state.getValue(FACING).getOpposite())); BlockPos relative = pos.relative(KeyboardBlockLeft.mapDirection(state.getValue(FACING).getOpposite()));
BlockState ns = world.getBlockState(relative); BlockState ns = world.getBlockState(relative);
if (ns.getBlock() instanceof BlockKeyboardLeft) if (ns.getBlock() instanceof KeyboardBlockLeft)
world.setBlock(relative, Blocks.AIR.defaultBlockState(), 3); world.setBlock(relative, Blocks.AIR.defaultBlockState(), 3);
} }
@ -83,7 +82,7 @@ public class BlockKeyboardRight extends Block implements IPeripheral {
@Override @Override
public boolean connect(Level world, BlockPos pos, BlockState state, Vector3i scrPos, BlockSide scrSide) { public boolean connect(Level world, BlockPos pos, BlockState state, Vector3i scrPos, BlockSide scrSide) {
TileEntityKeyboard keyboard = BlockKeyboardLeft.getTileEntity(state, world, pos); KeyboardBlockEntity keyboard = KeyboardBlockLeft.getTileEntity(state, world, pos);
return keyboard != null && keyboard.connect(world, pos, state, scrPos, scrSide); return keyboard != null && keyboard.connect(world, pos, state, scrPos, scrSide);
} }
@ -91,7 +90,7 @@ public class BlockKeyboardRight extends Block implements IPeripheral {
public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
double rpos = (entity.getY() - ((double) pos.getY())) * 16.0; double rpos = (entity.getY() - ((double) pos.getY())) * 16.0;
if (!world.isClientSide && rpos >= 1.0 && rpos <= 2.0 && Math.random() < 0.25) { if (!world.isClientSide && rpos >= 1.0 && rpos <= 2.0 && Math.random() < 0.25) {
TileEntityKeyboard tek = BlockKeyboardLeft.getTileEntity(state, world, pos); KeyboardBlockEntity tek = KeyboardBlockLeft.getTileEntity(state, world, pos);
if (tek != null) if (tek != null)
tek.simulateCat(entity); tek.simulateCat(entity);
@ -103,7 +102,7 @@ public class BlockKeyboardRight extends Block implements IPeripheral {
if (player.getItemInHand(hand).getItem() instanceof ItemLinker) if (player.getItemInHand(hand).getItem() instanceof ItemLinker)
return InteractionResult.PASS; return InteractionResult.PASS;
TileEntityKeyboard tek = BlockKeyboardLeft.getTileEntity(state, level, pos); KeyboardBlockEntity tek = KeyboardBlockLeft.getTileEntity(state, level, pos);
if (tek != null) if (tek != null)
return tek.onRightClick(player, hand); return tek.onRightClick(player, hand);

View File

@ -28,19 +28,19 @@ import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PacketDistributor;
import net.montoyo.wd.core.DefaultPeripheral; import net.montoyo.wd.core.DefaultPeripheral;
import net.montoyo.wd.entity.TileEntityInterfaceBase; import net.montoyo.wd.entity.AbstractInterfaceBlockEntity;
import net.montoyo.wd.entity.TileEntityPeripheralBase; import net.montoyo.wd.entity.AbstractPeripheralBlockEntity;
import net.montoyo.wd.entity.TileEntityServer; import net.montoyo.wd.entity.ServerBlockEntity;
import net.montoyo.wd.item.ItemLinker; import net.montoyo.wd.item.ItemLinker;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.client_bound.S2CMessageCloseGui; import net.montoyo.wd.net.client_bound.S2CMessageCloseGui;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public class BlockPeripheral extends WDBlockContainer { public class PeripheralBlock extends WDContainerBlock {
DefaultPeripheral type; DefaultPeripheral type;
public BlockPeripheral(DefaultPeripheral type) { public PeripheralBlock(DefaultPeripheral type) {
super(BlockBehaviour.Properties.copy(Blocks.STONE).strength(1.5f, 10.f)); super(BlockBehaviour.Properties.copy(Blocks.STONE).strength(1.5f, 10.f));
this.type = type; this.type = type;
} }
@ -49,12 +49,12 @@ public class BlockPeripheral extends WDBlockContainer {
@Override @Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
BlockEntityType.BlockEntitySupplier<? extends BlockEntity> cls = type.getTEClass(); BlockEntityType.BlockEntitySupplier<? extends BlockEntity> cls = type.getTEClass();
if(cls == null) if (cls == null)
return null; return null;
try { try {
return cls.create(pos, state); return cls.create(pos, state);
} catch(Throwable t) { } catch (Throwable t) {
Log.errorEx("Couldn't instantiate peripheral TileEntity:", t); Log.errorEx("Couldn't instantiate peripheral TileEntity:", t);
} }
@ -68,18 +68,18 @@ public class BlockPeripheral extends WDBlockContainer {
@Override @Override
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) {
if(player.isShiftKeyDown()) if (player.isShiftKeyDown())
return InteractionResult.FAIL; return InteractionResult.FAIL;
if(player.getItemInHand(hand).getItem() instanceof ItemLinker) if (player.getItemInHand(hand).getItem() instanceof ItemLinker)
return InteractionResult.FAIL; return InteractionResult.FAIL;
BlockEntity te = world.getBlockEntity(pos); BlockEntity te = world.getBlockEntity(pos);
if(te instanceof TileEntityPeripheralBase) if (te instanceof AbstractPeripheralBlockEntity)
return ((TileEntityPeripheralBase) te).onRightClick(player, hand); return ((AbstractPeripheralBlockEntity) te).onRightClick(player, hand);
else if(te instanceof TileEntityServer) { else if (te instanceof ServerBlockEntity) {
((TileEntityServer) te).onPlayerRightClick(player); ((ServerBlockEntity) te).onPlayerRightClick(player);
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} else } else
return InteractionResult.FAIL; return InteractionResult.FAIL;
@ -92,16 +92,16 @@ public class BlockPeripheral extends WDBlockContainer {
@Override @Override
public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) { public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) {
if(world.isClientSide) if (world.isClientSide)
return; return;
if(placer instanceof Player) { if (placer instanceof Player) {
BlockEntity te = world.getBlockEntity(pos); BlockEntity te = world.getBlockEntity(pos);
if(te instanceof TileEntityServer) if (te instanceof ServerBlockEntity)
((TileEntityServer) te).setOwner((Player) placer); ((ServerBlockEntity) te).setOwner((Player) placer);
else if(te instanceof TileEntityInterfaceBase) else if (te instanceof AbstractInterfaceBlockEntity)
((TileEntityInterfaceBase) te).setOwner((Player) placer); ((AbstractInterfaceBlockEntity) te).setOwner((Player) placer);
} }
} }
@ -113,13 +113,13 @@ public class BlockPeripheral extends WDBlockContainer {
@Override @Override
public void neighborChanged(BlockState state, Level world, BlockPos pos, Block neighborType, BlockPos neighbor, boolean isMoving) { public void neighborChanged(BlockState state, Level world, BlockPos pos, Block neighborType, BlockPos neighbor, boolean isMoving) {
BlockEntity te = world.getBlockEntity(pos); BlockEntity te = world.getBlockEntity(pos);
if(te instanceof TileEntityPeripheralBase) if (te instanceof AbstractPeripheralBlockEntity)
((TileEntityPeripheralBase) te).onNeighborChange(neighborType, neighbor); ((AbstractPeripheralBlockEntity) te).onNeighborChange(neighborType, neighbor);
} }
@Override @Override
public void playerDestroy(Level world, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack tool) { public void playerDestroy(Level world, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack tool) {
if(!world.isClientSide) { if (!world.isClientSide) {
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(world, pos)), new S2CMessageCloseGui(pos)); WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(world, pos)), new S2CMessageCloseGui(pos));
} }
super.playerDestroy(world, player, pos, state, blockEntity, tool); super.playerDestroy(world, player, pos, state, blockEntity, tool);

View File

@ -13,10 +13,8 @@ import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.BaseEntityBlock;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.RenderShape;
@ -34,59 +32,26 @@ import net.montoyo.wd.core.DefaultUpgrade;
import net.montoyo.wd.core.IUpgrade; import net.montoyo.wd.core.IUpgrade;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.data.SetURLData; import net.montoyo.wd.data.SetURLData;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.init.BlockInit;
import net.montoyo.wd.item.ItemLaserPointer; import net.montoyo.wd.item.ItemLaserPointer;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3f;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.serialization.Util;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class BlockScreen extends BaseEntityBlock { public class ScreenBlock extends BaseEntityBlock {
public static final BooleanProperty hasTE = BooleanProperty.create("haste"); public static final BooleanProperty hasTE = BooleanProperty.create("haste");
public static final BooleanProperty emitting = BooleanProperty.create("emitting"); public static final BooleanProperty emitting = BooleanProperty.create("emitting");
private static final Property<?>[] properties = new Property<?>[]{hasTE, emitting}; private static final Property<?>[] properties = new Property<?>[]{hasTE, emitting};
public BlockScreen(Properties properties) { public ScreenBlock(Properties properties) {
super(properties.strength(1.5f, 10.f)); super(properties.strength(1.5f, 10.f));
this.registerDefaultState(this.defaultBlockState().setValue(hasTE, false).setValue(emitting, false)); this.registerDefaultState(this.defaultBlockState().setValue(hasTE, false).setValue(emitting, false));
} }
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(properties);
}
@Override
public RenderShape getRenderShape(BlockState state) {
return RenderShape.MODEL;
}
public static boolean isntScreenBlock(Level world, Vector3i pos) {
return world.getBlockState(pos.toBlock()).getBlock() != BlockInit.blockScreen.get();
}
@org.jetbrains.annotations.Nullable
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
return super.getStateForPlacement(context);
}
@Override
public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos currentPos, BlockPos neighborPos) {
return super.updateShape(state, direction, neighborState, level, currentPos, neighborPos);
}
public int getMetaFromState(BlockState state) {
int ret = 0;
if (state.getValue(hasTE))
ret |= 1;
if (state.getValue(emitting))
ret |= 2;
return ret;
}
@Override @Override
public void onRemove(BlockState p_60515_, Level p_60516_, BlockPos p_60517_, BlockState p_60518_, boolean p_60519_) { public void onRemove(BlockState p_60515_, Level p_60516_, BlockPos p_60517_, BlockState p_60518_, boolean p_60519_) {
// TODO: make this also get called on client? // TODO: make this also get called on client?
@ -132,13 +97,13 @@ public class BlockScreen extends BaseEntityBlock {
BlockSide side = BlockSide.values()[hit.getDirection().ordinal()]; BlockSide side = BlockSide.values()[hit.getDirection().ordinal()];
Multiblock.findOrigin(world, pos, side, null); Multiblock.findOrigin(world, pos, side, null);
TileEntityScreen te = (TileEntityScreen) world.getBlockEntity(pos.toBlock()); ScreenBlockEntity te = (ScreenBlockEntity) world.getBlockEntity(pos.toBlock());
if (te != null && te.getScreen(side) != null) { if (te != null && te.getScreen(side) != null) {
TileEntityScreen.Screen scr = te.getScreen(side); ScreenBlockEntity.Screen scr = te.getScreen(side);
if (sneaking) { //Right Click if (sneaking) { //Right Click
if((scr.rightsFor(player) & ScreenRights.CHANGE_URL) == 0) if ((scr.rightsFor(player) & ScreenRights.CHANGE_URL) == 0)
Util.toast(player, "restrictions"); Util.toast(player, "restrictions");
else else
(new SetURLData(pos, scr.side, scr.url)).sendTo((ServerPlayer) player); (new SetURLData(pos, scr.side, scr.url)).sendTo((ServerPlayer) player);
@ -208,7 +173,7 @@ public class BlockScreen extends BaseEntityBlock {
if (te == null) { if (te == null) {
BlockPos bp = pos.toBlock(); BlockPos bp = pos.toBlock();
world.setBlockAndUpdate(bp, world.getBlockState(bp).setValue(hasTE, true)); world.setBlockAndUpdate(bp, world.getBlockState(bp).setValue(hasTE, true));
te = (TileEntityScreen) world.getBlockEntity(bp); te = (ScreenBlockEntity) world.getBlockEntity(bp);
created = true; created = true;
} }
@ -218,13 +183,13 @@ public class BlockScreen extends BaseEntityBlock {
@Override @Override
public void neighborChanged(BlockState state, Level world, BlockPos pos, Block block, BlockPos source, public void neighborChanged(BlockState state, Level world, BlockPos pos, Block block, BlockPos source,
boolean isMoving){ boolean isMoving) {
if (block != this && !world.isClientSide && !state.getValue(emitting)) { if (block != this && !world.isClientSide && !state.getValue(emitting)) {
for (BlockSide side : BlockSide.values()) { for (BlockSide side : BlockSide.values()) {
Vector3i vec = new Vector3i(pos); Vector3i vec = new Vector3i(pos);
Multiblock.findOrigin(world, vec, side, null); Multiblock.findOrigin(world, vec, side, null);
TileEntityScreen tes = (TileEntityScreen) world.getBlockEntity(vec.toBlock()); ScreenBlockEntity tes = (ScreenBlockEntity) world.getBlockEntity(vec.toBlock());
if (tes != null && tes.hasUpgrade(side, DefaultUpgrade.REDINPUT)) { if (tes != null && tes.hasUpgrade(side, DefaultUpgrade.REDINPUT)) {
Direction facing = Direction.from2DDataValue(side.reverse().ordinal()); //Opposite face Direction facing = Direction.from2DDataValue(side.reverse().ordinal()); //Opposite face
vec.sub(pos.getX(), pos.getY(), pos.getZ()).neg(); vec.sub(pos.getX(), pos.getY(), pos.getZ()).neg();
@ -234,16 +199,14 @@ public class BlockScreen extends BaseEntityBlock {
} }
} }
public static boolean hit2pixels(BlockSide side, BlockPos bpos, Vector3i pos, TileEntityScreen.Screen scr, float hitX, float hitY, float hitZ, Vector2i dst) { public static boolean hit2pixels(BlockSide side, BlockPos bpos, Vector3i pos, ScreenBlockEntity.Screen scr, float hitX, float hitY, float hitZ, Vector2i dst) {
if(side.right.x < 0) if(side.right.x < 0)
hitX -= 1.f; hitX -= 1.f;
if(side.right.z < 0 || side == BlockSide.TOP || side == BlockSide.BOTTOM) if(side.right.z < 0 || side == BlockSide.TOP || side == BlockSide.BOTTOM)
hitZ -= 1.f; hitZ -= 1.f;
Vector3f rel = new Vector3f(bpos.getX(), bpos.getY(), bpos.getZ()); Vector3f rel = new Vector3f(hitX, hitY, hitZ);
rel.sub((float) pos.x, (float) pos.y, (float) pos.z);
rel.add(hitX, hitY, hitZ);
float cx = rel.dot(side.right.toFloat()) - 2.f / 16.f; float cx = rel.dot(side.right.toFloat()) - 2.f / 16.f;
float cy = rel.dot(side.up.toFloat()) - 2.f / 16.f; float cy = rel.dot(side.up.toFloat()) - 2.f / 16.f;
@ -253,11 +216,11 @@ public class BlockScreen extends BaseEntityBlock {
cx /= sw; cx /= sw;
cy /= sh; cy /= sh;
if(cx >= 0.f && cx <= 1.0 && cy >= 0.f && cy <= 1.f) { if (cx >= 0.f && cx <= 1.0 && cy >= 0.f && cy <= 1.f) {
if(side != BlockSide.BOTTOM) if (side != BlockSide.BOTTOM)
cy = 1.f - cy; cy = 1.f - cy;
switch(scr.rotation) { switch (scr.rotation) {
case ROT_90: case ROT_90:
cy = 1.0f - cy; cy = 1.0f - cy;
break; break;
@ -270,15 +233,12 @@ public class BlockScreen extends BaseEntityBlock {
case ROT_270: case ROT_270:
cx = 1.0f - cx; cx = 1.0f - cx;
break; break;
default:
break;
} }
cx *= (float) scr.resolution.x; cx *= (float) scr.resolution.x;
cy *= (float) scr.resolution.y; cy *= (float) scr.resolution.y;
if(scr.rotation.isVertical) { if (scr.rotation.isVertical) {
dst.x = (int) cy; dst.x = (int) cy;
dst.y = (int) cx; dst.y = (int) cx;
} else { } else {
@ -292,20 +252,9 @@ public class BlockScreen extends BaseEntityBlock {
return false; return false;
} }
@org.jetbrains.annotations.Nullable
@Override
public BlockEntity newBlockEntity (BlockPos pos, BlockState state){
int meta = getMetaFromState(state);
if ((meta & 1) == 0)
return null;
return ((meta & 1) == 0) ? null : new TileEntityScreen(pos, state);
}
/************************************************* DESTRUCTION HANDLING *************************************************/ /************************************************* DESTRUCTION HANDLING *************************************************/
private void onDestroy (Level world, BlockPos pos, Player ply){ private void onDestroy(Level world, BlockPos pos, Player ply) {
if (!world.isClientSide) { if (!world.isClientSide) {
Vector3i bp = new Vector3i(pos); Vector3i bp = new Vector3i(pos);
Multiblock.BlockOverride override = new Multiblock.BlockOverride(bp, Multiblock.OverrideAction.SIMULATE); Multiblock.BlockOverride override = new Multiblock.BlockOverride(bp, Multiblock.OverrideAction.SIMULATE);
@ -315,28 +264,28 @@ public class BlockScreen extends BaseEntityBlock {
} }
} }
private void destroySide (Level world, Vector3i pos, BlockSide side, Multiblock.BlockOverride override, Player private void destroySide(Level world, Vector3i pos, BlockSide side, Multiblock.BlockOverride override, Player
source){ source) {
Multiblock.findOrigin(world, pos, side, override); Multiblock.findOrigin(world, pos, side, override);
BlockPos bp = pos.toBlock(); BlockPos bp = pos.toBlock();
BlockEntity te = world.getBlockEntity(bp); BlockEntity te = world.getBlockEntity(bp);
if (te instanceof TileEntityScreen) { if (te instanceof ScreenBlockEntity) {
((TileEntityScreen) te).onDestroy(source); ((ScreenBlockEntity) te).onDestroy(source);
world.setBlock(bp, world.getBlockState(bp).setValue(hasTE, false), Block.UPDATE_ALL_IMMEDIATE); //Destroy tile entity. world.setBlock(bp, world.getBlockState(bp).setValue(hasTE, false), Block.UPDATE_ALL_IMMEDIATE); //Destroy tile entity.
} }
} }
@Override @Override
public boolean onDestroyedByPlayer (BlockState state, Level level, BlockPos pos, Player player, public boolean onDestroyedByPlayer(BlockState state, Level level, BlockPos pos, Player player,
boolean willHarvest, FluidState fluid){ boolean willHarvest, FluidState fluid) {
onDestroy(level, pos, player); onDestroy(level, pos, player);
return super.onDestroyedByPlayer(state, level, pos, player, willHarvest, fluid); return super.onDestroyedByPlayer(state, level, pos, player, willHarvest, fluid);
} }
@Override @Override
public void setPlacedBy (Level world, @NotNull BlockPos pos, @NotNull BlockState public void setPlacedBy(Level world, @NotNull BlockPos pos, @NotNull BlockState
state, @org.jetbrains.annotations.Nullable LivingEntity whoDidThisShit, @NotNull ItemStack stack){ state, @org.jetbrains.annotations.Nullable LivingEntity whoDidThisShit, @NotNull ItemStack stack) {
if (world.isClientSide) if (world.isClientSide)
return; return;
@ -351,25 +300,42 @@ public class BlockScreen extends BaseEntityBlock {
neighbors[5] = new Vector3i(pos.getX(), pos.getY(), pos.getZ() - 1); neighbors[5] = new Vector3i(pos.getX(), pos.getY(), pos.getZ() - 1);
for (Vector3i neighbor : neighbors) { for (Vector3i neighbor : neighbors) {
if (world.getBlockState(neighbor.toBlock()).getBlock() instanceof BlockScreen) { if (world.getBlockState(neighbor.toBlock()).getBlock() instanceof ScreenBlock) {
for (BlockSide bs : BlockSide.values()) for (BlockSide bs : BlockSide.values())
destroySide(world, neighbor.clone(), bs, override, (whoDidThisShit instanceof Player) ? ((Player) whoDidThisShit) : null); destroySide(world, neighbor.clone(), bs, override, (whoDidThisShit instanceof Player) ? ((Player) whoDidThisShit) : null);
} }
} }
} }
/************************************************* STUFF THAT'S UNLIKELY TO BE TOUCHED BUT NEEDS TO BE HERE *************************************************/
@Override @Override
public @NotNull PushReaction getPistonPushReaction (BlockState state){ public @NotNull PushReaction getPistonPushReaction(BlockState state) {
return PushReaction.IGNORE; return PushReaction.IGNORE;
} }
@Override @Override
public int getSignal (BlockState state, BlockGetter level, BlockPos pos, Direction direction){ public int getSignal(BlockState state, BlockGetter level, BlockPos pos, Direction direction) {
return state.getValue(emitting) ? 15 : 0; return state.getValue(emitting) ? 15 : 0;
} }
@Override @Override
public boolean isSignalSource (BlockState state){ public boolean isSignalSource(BlockState state) {
return state.getValue(emitting); return state.getValue(emitting);
} }
@Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
return state.getValue(hasTE) ? new ScreenBlockEntity(pos, state) : null;
}
@Override
public RenderShape getRenderShape(BlockState state) {
return RenderShape.MODEL;
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(properties);
}
} }

View File

@ -7,11 +7,11 @@ package net.montoyo.wd.block;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.BaseEntityBlock;
public abstract class WDBlockContainer extends BaseEntityBlock { public abstract class WDContainerBlock extends BaseEntityBlock {
protected static BlockItem itemBlock; protected static BlockItem itemBlock;
public WDBlockContainer(Properties arg) { public WDContainerBlock(Properties arg) {
super(arg); super(arg);
} }

View File

@ -7,48 +7,48 @@ import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.montoyo.wd.block.BlockKeyboardLeft; import net.montoyo.wd.block.KeyboardBlockLeft;
import net.montoyo.wd.init.BlockInit; import net.montoyo.wd.registry.BlockRegistry;
public class KeyboardItem extends BlockItem { public class KeyboardItem extends BlockItem {
public KeyboardItem(Block arg, Properties arg2) { public KeyboardItem(Block arg, Properties arg2) {
super(arg, arg2); super(arg, arg2);
} }
@Override @Override
protected boolean placeBlock(BlockPlaceContext arg, BlockState arg2) { protected boolean placeBlock(BlockPlaceContext arg, BlockState arg2) {
Direction facing = arg.getHorizontalDirection(); Direction facing = arg.getHorizontalDirection();
arg2 = arg2.setValue(BlockKeyboardLeft.FACING, facing); arg2 = arg2.setValue(KeyboardBlockLeft.FACING, facing);
Direction d = BlockKeyboardLeft.mapDirection(facing); Direction d = KeyboardBlockLeft.mapDirection(facing);
if (isValid(arg.getClickedPos(), arg.getLevel(), arg2, d)) { if (isValid(arg.getClickedPos(), arg.getLevel(), arg2, d)) {
Block kbRight = BlockInit.blockKbRight.get(); Block kbRight = BlockRegistry.blockKbRight.get();
BlockState rightState = kbRight.defaultBlockState(); BlockState rightState = kbRight.defaultBlockState();
rightState = rightState.setValue(BlockKeyboardLeft.FACING, facing); rightState = rightState.setValue(KeyboardBlockLeft.FACING, facing);
if (!arg.getLevel().setBlock( if (!arg.getLevel().setBlock(
arg.getClickedPos().relative(d), arg.getClickedPos().relative(d),
rightState, rightState,
11 11
)) return false; )) return false;
return arg.getLevel().setBlock(arg.getClickedPos(), arg2, 11);// 161 return arg.getLevel().setBlock(arg.getClickedPos(), arg2, 11);// 161
} else if (isValid(arg.getClickedPos().relative(d.getOpposite(), 2), arg.getLevel(), arg2, d)) { } else if (isValid(arg.getClickedPos().relative(d.getOpposite(), 2), arg.getLevel(), arg2, d)) {
Block kbRight = BlockInit.blockKbRight.get(); Block kbRight = BlockRegistry.blockKbRight.get();
BlockState rightState = kbRight.defaultBlockState(); BlockState rightState = kbRight.defaultBlockState();
rightState = rightState.setValue(BlockKeyboardLeft.FACING, facing); rightState = rightState.setValue(KeyboardBlockLeft.FACING, facing);
if (!arg.getLevel().setBlock( if (!arg.getLevel().setBlock(
arg.getClickedPos(), arg.getClickedPos(),
rightState, rightState,
11 11
)) return false; )) return false;
return arg.getLevel().setBlock(arg.getClickedPos().relative(d.getOpposite()), arg2, 11);// 161 return arg.getLevel().setBlock(arg.getClickedPos().relative(d.getOpposite()), arg2, 11);// 161
} }
return false; return false;
} }
private boolean isValid(BlockPos pos, Level level, BlockState state, Direction d) { private boolean isValid(BlockPos pos, Level level, BlockState state, Direction d) {
return level.getBlockState(pos.relative(d)).isAir(); return level.getBlockState(pos.relative(d)).isAir();
} }
} }

View File

@ -10,13 +10,11 @@ import com.mojang.authlib.GameProfile;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.advancements.Advancement; import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementProgress; import net.minecraft.advancements.AdvancementProgress;
import net.minecraft.client.KeyMapping; import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.Options; import net.minecraft.client.Options;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
@ -24,8 +22,6 @@ import net.minecraft.client.multiplayer.ClientAdvancements;
import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.resources.model.Material;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@ -62,18 +58,16 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.SharedProxy; import net.montoyo.wd.SharedProxy;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.block.BlockScreen; import net.montoyo.wd.block.ScreenBlock;
import net.montoyo.wd.client.gui.*; import net.montoyo.wd.client.gui.*;
import net.montoyo.wd.client.gui.loading.GuiLoader; import net.montoyo.wd.client.gui.loading.GuiLoader;
import net.montoyo.wd.client.renderers.*; import net.montoyo.wd.client.renderers.*;
import net.montoyo.wd.config.ClientConfig;
import net.montoyo.wd.core.HasAdvancement; import net.montoyo.wd.core.HasAdvancement;
import net.montoyo.wd.core.JSServerRequest;
import net.montoyo.wd.data.GuiData; import net.montoyo.wd.data.GuiData;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.init.BlockInit; import net.montoyo.wd.registry.BlockRegistry;
import net.montoyo.wd.init.ItemInit; import net.montoyo.wd.registry.ItemRegistry;
import net.montoyo.wd.init.TileInit; import net.montoyo.wd.registry.TileRegistry;
import net.montoyo.wd.item.ItemLaserPointer; import net.montoyo.wd.item.ItemLaserPointer;
import net.montoyo.wd.item.ItemMinePad2; import net.montoyo.wd.item.ItemMinePad2;
import net.montoyo.wd.item.WDItem; import net.montoyo.wd.item.WDItem;
@ -81,12 +75,16 @@ import net.montoyo.wd.miniserv.client.Client;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.server_bound.C2SMessageMinepadUrl; import net.montoyo.wd.net.server_bound.C2SMessageMinepadUrl;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import org.cef.CefSettings; import org.cef.CefSettings;
import org.cef.browser.CefBrowser; import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame; import org.cef.browser.CefFrame;
import org.cef.handler.CefDisplayHandler; import org.cef.handler.CefDisplayHandler;
import org.cef.misc.CefCursorType; import org.cef.misc.CefCursorType;
import org.cef.network.CefRequest;
import org.joml.Vector3d; import org.joml.Vector3d;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@ -150,7 +148,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
BlockPos bpos = result.getBlockPos(); BlockPos bpos = result.getBlockPos();
if (result.getType() != HitResult.Type.BLOCK || mc.level.getBlockState(bpos).getBlock() != BlockInit.blockScreen.get()) { if (result.getType() != HitResult.Type.BLOCK || mc.level.getBlockState(bpos).getBlock() != BlockRegistry.SCREEN_BLOCk.get()) {
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE_MINUS_DST_COLOR, GlStateManager.DestFactor.ONE_MINUS_SRC_COLOR, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE_MINUS_DST_COLOR, GlStateManager.DestFactor.ONE_MINUS_SRC_COLOR, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
poseStack.blit(new ResourceLocation( poseStack.blit(new ResourceLocation(
@ -164,9 +162,9 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
BlockSide side = BlockSide.values()[result.getDirection().ordinal()]; BlockSide side = BlockSide.values()[result.getDirection().ordinal()];
Multiblock.findOrigin(mc.level, pos, side, null); Multiblock.findOrigin(mc.level, pos, side, null);
TileEntityScreen te = (TileEntityScreen) mc.level.getBlockEntity(pos.toBlock()); ScreenBlockEntity te = (ScreenBlockEntity) mc.level.getBlockEntity(pos.toBlock());
TileEntityScreen.Screen sc = te.getScreen(side); ScreenBlockEntity.Screen sc = te.getScreen(side);
if (sc == null) return; if (sc == null) return;
@ -198,7 +196,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
private PadData(String url, UUID id) { private PadData(String url, UUID id) {
String webUrl; String webUrl;
try { try {
webUrl = TileEntityScreen.url(url); webUrl = ScreenBlockEntity.url(url);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -231,7 +229,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
private Map advancementToProgress; private Map advancementToProgress;
//Tracking //Tracking
private final ArrayList<TileEntityScreen> screenTracking = new ArrayList<>(); private final ArrayList<ScreenBlockEntity> screenTracking = new ArrayList<>();
private int lastTracked = 0; private int lastTracked = 0;
//MinePads Management //MinePads Management
@ -242,7 +240,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
/**************************************** INHERITED METHODS ****************************************/ /**************************************** INHERITED METHODS ****************************************/
@SubscribeEvent @SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) { public static void onClientSetup(FMLClientSetupEvent event) {
BlockEntityRenderers.register(TileInit.SCREEN_BLOCK_ENTITY.get(), new ScreenRenderer.ScreenRendererProvider()); BlockEntityRenderers.register(TileRegistry.SCREEN_BLOCK_ENTITY.get(), new ScreenRenderer.ScreenRendererProvider());
} }
@SubscribeEvent @SubscribeEvent
@ -320,7 +318,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
} }
@Override @Override
public void trackScreen(TileEntityScreen tes, boolean track) { public void trackScreen(ScreenBlockEntity tes, boolean track) {
int idx = -1; int idx = -1;
for (int i = 0; i < screenTracking.size(); i++) { for (int i = 0; i < screenTracking.size(); i++) {
if (screenTracking.get(i) == tes) { if (screenTracking.get(i) == tes) {
@ -541,7 +539,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
} }
} }
for (TileEntityScreen tes : screenTracking) for (ScreenBlockEntity tes : screenTracking)
tes.updateClientSideURL(browser, url); tes.updateClientSideURL(browser, url);
} }
} }
@ -651,7 +649,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
int id = lastTracked % screenTracking.size(); int id = lastTracked % screenTracking.size();
TileEntityScreen tes = screenTracking.get(id); ScreenBlockEntity tes = screenTracking.get(id);
if (!tes.getLevel().equals(ev.level)) if (!tes.getLevel().equals(ev.level))
return; return;
@ -665,7 +663,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
} else { } else {
double dist = Double.POSITIVE_INFINITY; double dist = Double.POSITIVE_INFINITY;
for (int i = 0; i < tes.screenCount(); i++) { for (int i = 0; i < tes.screenCount(); i++) {
TileEntityScreen.Screen scrn = tes.getScreen(i); ScreenBlockEntity.Screen scrn = tes.getScreen(i);
Vector3d pos = new Vector3d( Vector3d pos = new Vector3d(
scrn.side.right.x * scrn.size.x + scrn.size.y * scrn.side.up.x, scrn.side.right.x * scrn.size.x + scrn.size.y * scrn.side.up.x,
@ -780,10 +778,10 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
Item item = ev.getItemStack().getItem(); Item item = ev.getItemStack().getItem();
IItemRenderer renderer; IItemRenderer renderer;
if (ItemInit.MINEPAD.isPresent() && ItemInit.LASER_POINTER.isPresent()) { if (ItemRegistry.MINEPAD.isPresent() && ItemRegistry.LASER_POINTER.isPresent()) {
if (item == ItemInit.MINEPAD.get()) if (item == ItemRegistry.MINEPAD.get())
renderer = minePadRenderer; renderer = minePadRenderer;
else if (item == ItemInit.LASER_POINTER.get()) else if (item == ItemRegistry.LASER_POINTER.get())
renderer = laserPointerRenderer; renderer = laserPointerRenderer;
else else
return; return;
@ -823,8 +821,8 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
for (int i = 0; i < cnt; i++) { for (int i = 0; i < cnt; i++) {
ItemStack item = inv.get(i); ItemStack item = inv.get(i);
if (ItemInit.MINEPAD.isPresent()) { if (ItemRegistry.MINEPAD.isPresent()) {
if (item.getItem() == ItemInit.MINEPAD.get()) { if (item.getItem() == ItemRegistry.MINEPAD.get()) {
CompoundTag tag = item.getTag(); CompoundTag tag = item.getTag();
if (tag != null && tag.contains("PadID")) if (tag != null && tag.contains("PadID"))
@ -856,15 +854,15 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
public static final class ScreenSidePair { public static final class ScreenSidePair {
public TileEntityScreen tes; public ScreenBlockEntity tes;
public BlockSide side; public BlockSide side;
} }
public boolean findScreenFromBrowser(CefBrowser browser, ScreenSidePair pair) { public boolean findScreenFromBrowser(CefBrowser browser, ScreenSidePair pair) {
for (TileEntityScreen tes : screenTracking) { for (ScreenBlockEntity tes : screenTracking) {
for (int i = 0; i < tes.screenCount(); i++) { for (int i = 0; i < tes.screenCount(); i++) {
TileEntityScreen.Screen scr = tes.getScreen(i); ScreenBlockEntity.Screen scr = tes.getScreen(i);
if (scr.browser == browser) { if (scr.browser == browser) {
pair.tes = tes; pair.tes = tes;
@ -905,7 +903,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
public static void onDrawSelection(RenderHighlightEvent event) { public static void onDrawSelection(RenderHighlightEvent event) {
if (event.getTarget() instanceof BlockHitResult bhr) { if (event.getTarget() instanceof BlockHitResult bhr) {
BlockState state = Minecraft.getInstance().level.getBlockState(bhr.getBlockPos()); BlockState state = Minecraft.getInstance().level.getBlockState(bhr.getBlockPos());
if (state.getBlock() instanceof BlockScreen screen) { if (state.getBlock() instanceof ScreenBlock screen) {
Vector3i vec = new Vector3i(bhr.getBlockPos().getX(), bhr.getBlockPos().getY(), bhr.getBlockPos().getZ()); Vector3i vec = new Vector3i(bhr.getBlockPos().getX(), bhr.getBlockPos().getY(), bhr.getBlockPos().getZ());
BlockSide side = BlockSide.fromInt(bhr.getDirection().ordinal()); BlockSide side = BlockSide.fromInt(bhr.getDirection().ordinal());
Multiblock.findOrigin( Multiblock.findOrigin(
@ -917,7 +915,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
BlockEntity be = Minecraft.getInstance().level.getBlockEntity( BlockEntity be = Minecraft.getInstance().level.getBlockEntity(
pos pos
); );
if (be instanceof TileEntityScreen tes) { if (be instanceof ScreenBlockEntity tes) {
if (tes.getScreen(side) != null) { if (tes.getScreen(side) != null) {
event.setCanceled(true); event.setCanceled(true);
} }

View File

@ -8,7 +8,7 @@ import net.montoyo.wd.miniserv.Constants;
import net.montoyo.wd.miniserv.client.Client; import net.montoyo.wd.miniserv.client.Client;
import net.montoyo.wd.miniserv.client.ClientTaskGetFile; import net.montoyo.wd.miniserv.client.ClientTaskGetFile;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import org.cef.callback.CefCallback; import org.cef.callback.CefCallback;
import org.cef.handler.CefResourceHandler; import org.cef.handler.CefResourceHandler;
import org.cef.misc.IntRef; import org.cef.misc.IntRef;

View File

@ -17,13 +17,13 @@ import net.montoyo.wd.client.gui.controls.Button;
import net.montoyo.wd.client.gui.controls.Control; import net.montoyo.wd.client.gui.controls.Control;
import net.montoyo.wd.client.gui.controls.Label; import net.montoyo.wd.client.gui.controls.Label;
import net.montoyo.wd.client.gui.loading.FillControl; import net.montoyo.wd.client.gui.loading.FillControl;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl; import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.TypeData; import net.montoyo.wd.utilities.serialization.TypeData;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import org.vivecraft.client_vr.gameplay.VRPlayer; import org.vivecraft.client_vr.gameplay.VRPlayer;
import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler; import org.vivecraft.client_vr.gameplay.screenhandlers.KeyboardHandler;
@ -40,7 +40,7 @@ public class GuiKeyboard extends WDScreen {
private static final String WARNING_FNAME = "wd_keyboard_warning.txt"; private static final String WARNING_FNAME = "wd_keyboard_warning.txt";
private TileEntityScreen tes; private ScreenBlockEntity tes;
private BlockSide side; private BlockSide side;
private final ArrayList<TypeData> evStack = new ArrayList<>(); private final ArrayList<TypeData> evStack = new ArrayList<>();
private BlockPos kbPos; private BlockPos kbPos;
@ -56,7 +56,7 @@ public class GuiKeyboard extends WDScreen {
super(Component.nullToEmpty(null)); super(Component.nullToEmpty(null));
} }
public GuiKeyboard(TileEntityScreen tes, BlockSide side, BlockPos kbPos) { public GuiKeyboard(ScreenBlockEntity tes, BlockSide side, BlockPos kbPos) {
this(); this();
this.tes = tes; this.tes = tes;
this.side = side; this.side = side;

View File

@ -4,7 +4,6 @@
package net.montoyo.wd.client.gui; package net.montoyo.wd.client.gui;
import com.cinemamod.mcef.MCEF;
import com.cinemamod.mcef.MCEFBrowser; import com.cinemamod.mcef.MCEFBrowser;
import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
@ -16,8 +15,7 @@ import net.minecraft.network.chat.Component;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.client.ClientProxy; import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import org.cef.browser.CefBrowserOsr;
import org.cef.misc.CefCursorType; import org.cef.misc.CefCursorType;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;

View File

@ -7,16 +7,11 @@ package net.montoyo.wd.client.gui;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.client.gui.controls.Button; import net.montoyo.wd.client.gui.controls.Button;
import net.montoyo.wd.client.gui.controls.TextField; import net.montoyo.wd.client.gui.controls.TextField;
import net.montoyo.wd.client.gui.loading.FillControl; import net.montoyo.wd.client.gui.loading.FillControl;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.net.server_bound.C2SMessageRedstoneCtrl; import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.BlockSide;
import net.montoyo.wd.utilities.Util;
import net.montoyo.wd.utilities.Vector3i;
import javax.annotation.Nullable; import javax.annotation.Nullable;

View File

@ -15,11 +15,15 @@ import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.client.gui.controls.*; import net.montoyo.wd.client.gui.controls.*;
import net.montoyo.wd.client.gui.loading.FillControl; import net.montoyo.wd.client.gui.loading.FillControl;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.item.WDItem; import net.montoyo.wd.item.WDItem;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl; import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -30,7 +34,7 @@ import java.util.UUID;
public class GuiScreenConfig extends WDScreen { public class GuiScreenConfig extends WDScreen {
//Screen data //Screen data
private final TileEntityScreen tes; private final ScreenBlockEntity tes;
private final BlockSide side; private final BlockSide side;
private NameUUIDPair owner; private NameUUIDPair owner;
private NameUUIDPair[] friends; private NameUUIDPair[] friends;
@ -119,7 +123,7 @@ public class GuiScreenConfig extends WDScreen {
private CheckBox[] friendBoxes; private CheckBox[] friendBoxes;
private CheckBox[] otherBoxes; private CheckBox[] otherBoxes;
public GuiScreenConfig(Component component, TileEntityScreen tes, BlockSide side, NameUUIDPair[] friends, int fr, int or) { public GuiScreenConfig(Component component, ScreenBlockEntity tes, BlockSide side, NameUUIDPair[] friends, int fr, int or) {
super(component); super(component);
this.tes = tes; this.tes = tes;
this.side = side; this.side = side;
@ -147,7 +151,7 @@ public class GuiScreenConfig extends WDScreen {
boxOClick.setUserdata(ScreenRights.INTERACT); boxOClick.setUserdata(ScreenRights.INTERACT);
boxOSetUrl.setUserdata(ScreenRights.CHANGE_URL); boxOSetUrl.setUserdata(ScreenRights.CHANGE_URL);
TileEntityScreen.Screen scr = tes.getScreen(side); ScreenBlockEntity.Screen scr = tes.getScreen(side);
if(scr != null) { if(scr != null) {
owner = scr.owner; owner = scr.owner;
rotation = scr.rotation; rotation = scr.rotation;
@ -191,7 +195,7 @@ public class GuiScreenConfig extends WDScreen {
} }
private void clickSetRes() { private void clickSetRes() {
TileEntityScreen.Screen scr = tes.getScreen(side); ScreenBlockEntity.Screen scr = tes.getScreen(side);
if(scr == null) if(scr == null)
return; //WHATDAFUQ? return; //WHATDAFUQ?

View File

@ -23,9 +23,11 @@ import net.montoyo.wd.miniserv.Constants;
import net.montoyo.wd.miniserv.client.*; import net.montoyo.wd.miniserv.client.*;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import net.montoyo.wd.utilities.serialization.Util;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import org.lwjgl.opengl.GL;
import org.lwjgl.opengl.GL11;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.swing.filechooser.FileSystemView; import javax.swing.filechooser.FileSystemView;

View File

@ -15,14 +15,14 @@ import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.client.gui.controls.Button; import net.montoyo.wd.client.gui.controls.Button;
import net.montoyo.wd.client.gui.controls.TextField; import net.montoyo.wd.client.gui.controls.TextField;
import net.montoyo.wd.client.gui.loading.FillControl; import net.montoyo.wd.client.gui.loading.FillControl;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.item.ItemMinePad2; import net.montoyo.wd.item.ItemMinePad2;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.server_bound.C2SMessageMinepadUrl; import net.montoyo.wd.net.server_bound.C2SMessageMinepadUrl;
import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl; import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
@ -32,7 +32,7 @@ import java.util.UUID;
public class GuiSetURL2 extends WDScreen { public class GuiSetURL2 extends WDScreen {
//Screen data //Screen data
private TileEntityScreen tileEntity; private ScreenBlockEntity tileEntity;
private BlockSide screenSide; private BlockSide screenSide;
private Vector3i remoteLocation; private Vector3i remoteLocation;
@ -55,7 +55,7 @@ public class GuiSetURL2 extends WDScreen {
@FillControl @FillControl
private Button btnOk; private Button btnOk;
public GuiSetURL2(TileEntityScreen tes, BlockSide side, String url, Vector3i rl) { public GuiSetURL2(ScreenBlockEntity tes, BlockSide side, String url, Vector3i rl) {
super(Component.nullToEmpty(null)); super(Component.nullToEmpty(null));
tileEntity = tes; tileEntity = tes;
screenSide = side; screenSide = side;
@ -120,7 +120,7 @@ public class GuiSetURL2 extends WDScreen {
if (!url.isEmpty()) { if (!url.isEmpty()) {
try { try {
TileEntityScreen.url(url); ScreenBlockEntity.url(url);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -8,7 +8,6 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
@ -27,6 +26,10 @@ import net.montoyo.wd.client.gui.loading.JsonOWrapper;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.server_bound.C2SMessageACQuery; import net.montoyo.wd.net.server_bound.C2SMessageACQuery;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.data.Bounds;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.io.IOException; import java.io.IOException;

View File

@ -14,20 +14,18 @@ import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.ShaderInstance;
import net.minecraft.client.resources.language.I18n; import net.minecraft.client.resources.language.I18n;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.montoyo.wd.client.gui.WDScreen; import net.montoyo.wd.client.gui.WDScreen;
import net.montoyo.wd.client.gui.loading.JsonOWrapper; import net.montoyo.wd.client.gui.loading.JsonOWrapper;
import net.montoyo.wd.utilities.Bounds; import net.montoyo.wd.utilities.data.Bounds;
import org.joml.Matrix4f; import org.joml.Matrix4f;
import java.util.Arrays; import java.util.Arrays;
import static com.mojang.math.Axis.XP; import static com.mojang.math.Axis.XP;
import static org.lwjgl.opengl.GL11.*;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public abstract class Control { public abstract class Control {

View File

@ -7,18 +7,14 @@ package net.montoyo.wd.client.gui.controls;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
import net.montoyo.wd.client.gui.loading.JsonOWrapper; import net.montoyo.wd.client.gui.loading.JsonOWrapper;
import net.montoyo.wd.utilities.Bounds; import net.montoyo.wd.utilities.data.Bounds;
import org.lwjgl.opengl.GL11;
import java.util.Arrays; import java.util.Arrays;
import static org.lwjgl.opengl.GL11.*;
public class ControlGroup extends Container { public class ControlGroup extends Container {
private int width; private int width;

View File

@ -6,7 +6,7 @@ package net.montoyo.wd.client.gui.controls;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.montoyo.wd.client.gui.loading.JsonOWrapper; import net.montoyo.wd.client.gui.loading.JsonOWrapper;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import net.montoyo.wd.utilities.VideoType; import net.montoyo.wd.utilities.VideoType;
import java.net.MalformedURLException; import java.net.MalformedURLException;

View File

@ -16,10 +16,9 @@ import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.montoyo.wd.client.ClientProxy; import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.init.ItemInit; import net.montoyo.wd.registry.ItemRegistry;
import net.montoyo.wd.item.ItemLaserPointer; import net.montoyo.wd.item.ItemLaserPointer;
import org.joml.Matrix4f; import org.joml.Matrix4f;
import org.lwjgl.opengl.GL11;
import static com.mojang.math.Axis.*; import static com.mojang.math.Axis.*;
@ -40,7 +39,7 @@ public final class LaserPointerRenderer implements IItemRenderer {
ClientProxy.mouseOn || ClientProxy.mouseOn ||
ItemLaserPointer.isOn() ItemLaserPointer.isOn()
) && ) &&
mc.player.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemInit.LASER_POINTER.get()) && mc.player.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemRegistry.LASER_POINTER.get()) &&
(mc.hitResult == null || mc.hitResult.getType() == HitResult.Type.BLOCK || mc.hitResult.getType() == HitResult.Type.MISS); (mc.hitResult == null || mc.hitResult.getType() == HitResult.Type.BLOCK || mc.hitResult.getType() == HitResult.Type.MISS);
} }

View File

@ -19,9 +19,9 @@ import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.client.model.data.ModelData;
import net.minecraftforge.client.model.data.ModelProperty; import net.minecraftforge.client.model.data.ModelProperty;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Vector3f; import net.montoyo.wd.utilities.math.Vector3f;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;

View File

@ -11,21 +11,20 @@ import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.Vector3f; import net.montoyo.wd.utilities.math.Vector3f;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.lwjgl.opengl.GL11;
import static com.mojang.math.Axis.*; import static com.mojang.math.Axis.*;
public class ScreenRenderer implements BlockEntityRenderer<TileEntityScreen> { public class ScreenRenderer implements BlockEntityRenderer<ScreenBlockEntity> {
public ScreenRenderer() { public ScreenRenderer() {
} }
public static class ScreenRendererProvider implements BlockEntityRendererProvider<TileEntityScreen> { public static class ScreenRendererProvider implements BlockEntityRendererProvider<ScreenBlockEntity> {
@Override @Override
public @NotNull BlockEntityRenderer<TileEntityScreen> create(@NotNull Context arg) { public @NotNull BlockEntityRenderer<ScreenBlockEntity> create(@NotNull Context arg) {
return new ScreenRenderer(); return new ScreenRenderer();
} }
} }
@ -35,7 +34,7 @@ public class ScreenRenderer implements BlockEntityRenderer<TileEntityScreen> {
private final Vector3f tmpf = new Vector3f(); private final Vector3f tmpf = new Vector3f();
@Override @Override
public void render(TileEntityScreen te, float partialTick, @NotNull PoseStack poseStack, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) { public void render(ScreenBlockEntity te, float partialTick, @NotNull PoseStack poseStack, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) {
if (!te.isLoaded()) if (!te.isLoaded())
return; return;
@ -45,7 +44,7 @@ public class ScreenRenderer implements BlockEntityRenderer<TileEntityScreen> {
RenderSystem.disableBlend(); RenderSystem.disableBlend();
for (int i = 0; i < te.screenCount(); i++) { for (int i = 0; i < te.screenCount(); i++) {
TileEntityScreen.Screen scr = te.getScreen(i); ScreenBlockEntity.Screen scr = te.getScreen(i);
if (scr.browser == null) { if (scr.browser == null) {
scr.createBrowser(true); scr.createBrowser(true);
} }

View File

@ -8,8 +8,8 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import java.util.Objects; import java.util.Objects;
import java.util.function.Function; import java.util.function.Function;
@ -22,9 +22,9 @@ public abstract class ScreenControl {
} }
public abstract void write(FriendlyByteBuf buf); public abstract void write(FriendlyByteBuf buf);
public abstract void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException; public abstract void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public abstract void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx); public abstract void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx);
public void checkPerms(int perms, Function<Integer, Boolean> checker, ServerPlayer player) throws MissingPermissionException { public void checkPerms(int perms, Function<Integer, Boolean> checker, ServerPlayer player) throws MissingPermissionException {
if (!checker.apply(perms)) { if (!checker.apply(perms)) {

View File

@ -8,8 +8,8 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.loading.FMLEnvironment; import net.minecraftforge.fml.loading.FMLEnvironment;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.builtin.*; import net.montoyo.wd.controls.builtin.*;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -32,7 +32,7 @@ public class ScreenControlRegistry {
if (FMLEnvironment.dist.isClient()) { if (FMLEnvironment.dist.isClient()) {
boolean shouldThrow = false; boolean shouldThrow = false;
try { try {
Method m = type.clazz.getMethod("handleClient", BlockPos.class, BlockSide.class, TileEntityScreen.class, NetworkEvent.Context.class); Method m = type.clazz.getMethod("handleClient", BlockPos.class, BlockSide.class, ScreenBlockEntity.class, NetworkEvent.Context.class);
OnlyIn onlyIn = m.getAnnotation(OnlyIn.class); OnlyIn onlyIn = m.getAnnotation(OnlyIn.class);
if (onlyIn == null) shouldThrow = true; if (onlyIn == null) shouldThrow = true;
Dist d = onlyIn.value(); // idc if this throws, lol Dist d = onlyIn.value(); // idc if this throws, lol

View File

@ -9,8 +9,8 @@ import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import java.util.function.Function; import java.util.function.Function;
@ -35,7 +35,7 @@ public class AutoVolumeControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
// I feel like there's probably a better permission category // I feel like there's probably a better permission category
checkPerms(ScreenRights.MANAGE_UPGRADES, permissionChecker, ctx.getSender()); checkPerms(ScreenRights.MANAGE_UPGRADES, permissionChecker, ctx.getSender());
tes.setAutoVolume(side, autoVol); tes.setAutoVolume(side, autoVol);
@ -43,7 +43,7 @@ public class AutoVolumeControl extends ScreenControl {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
tes.setAutoVolume(side, autoVol); tes.setAutoVolume(side, autoVol);
} }
} }

View File

@ -8,9 +8,9 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Vector2i; import net.montoyo.wd.utilities.math.Vector2i;
import java.util.function.Function; import java.util.function.Function;
@ -47,13 +47,13 @@ public class ClickControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
throw new RuntimeException("Cannot call click control on server"); throw new RuntimeException("Cannot call click control on server");
} }
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
if (coord != null) if (coord != null)
tes.handleMouseEvent(side, ClickControl.ControlType.MOVE, coord, -1); tes.handleMouseEvent(side, ClickControl.ControlType.MOVE, coord, -1);

View File

@ -10,9 +10,8 @@ import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.JSServerRequest; import net.montoyo.wd.core.JSServerRequest;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Log;
import java.util.function.Function; import java.util.function.Function;
@ -49,7 +48,7 @@ public class JSRequestControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
ServerPlayer player = ctx.getSender(); ServerPlayer player = ctx.getSender();
// if (reqType == null || data == null) Log.warning("Caught invalid JS request from player %s (UUID %s)", player.getName(), player.getGameProfile().getId().toString()); // if (reqType == null || data == null) Log.warning("Caught invalid JS request from player %s (UUID %s)", player.getName(), player.getGameProfile().getId().toString());
// else tes.handleJSRequest(player, side, reqId, reqType, data); // else tes.handleJSRequest(player, side, reqId, reqType, data);
@ -57,7 +56,7 @@ public class JSRequestControl extends ScreenControl {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
throw new RuntimeException("TODO"); throw new RuntimeException("TODO");
} }
} }

View File

@ -9,8 +9,8 @@ import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import java.util.function.Function; import java.util.function.Function;
@ -39,14 +39,14 @@ public class KeyTypedControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
checkPerms(ScreenRights.INTERACT, permissionChecker, ctx.getSender()); checkPerms(ScreenRights.INTERACT, permissionChecker, ctx.getSender());
tes.type(side, text, soundPos, ctx.getSender()); tes.type(side, text, soundPos, ctx.getSender());
} }
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
tes.type(side, text, soundPos); tes.type(side, text, soundPos);
} }
} }

View File

@ -9,9 +9,9 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Vector2i; import net.montoyo.wd.utilities.math.Vector2i;
import java.util.function.Function; import java.util.function.Function;
@ -54,7 +54,7 @@ public class LaserControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
// feel like this makes sense, but I wanna get opinions first // feel like this makes sense, but I wanna get opinions first
// checkPerms(ScreenRights.INTERACT, permissionChecker, ctx.getSender()); // checkPerms(ScreenRights.INTERACT, permissionChecker, ctx.getSender());
ServerPlayer sender = ctx.getSender(); ServerPlayer sender = ctx.getSender();
@ -67,7 +67,7 @@ public class LaserControl extends ScreenControl {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
if (coord != null) if (coord != null)
tes.handleMouseEvent(side, ClickControl.ControlType.MOVE, coord, -1); tes.handleMouseEvent(side, ClickControl.ControlType.MOVE, coord, -1);

View File

@ -11,8 +11,8 @@ import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import java.util.function.Function; import java.util.function.Function;
@ -79,7 +79,7 @@ public class ManageRightsAndUpdgradesControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
ServerPlayer player = ctx.getSender(); ServerPlayer player = ctx.getSender();
switch (type) { switch (type) {
case UPGRADES -> { case UPGRADES -> {
@ -89,7 +89,7 @@ public class ManageRightsAndUpdgradesControl extends ScreenControl {
else tes.removeUpgrade(side, toRemove, player); else tes.removeUpgrade(side, toRemove, player);
} }
case RIGHTS -> { case RIGHTS -> {
TileEntityScreen.Screen scr = tes.getScreen(side); ScreenBlockEntity.Screen scr = tes.getScreen(side);
int fr = scr.owner.uuid.equals(player.getGameProfile().getId()) ? friendRights : scr.friendRights; int fr = scr.owner.uuid.equals(player.getGameProfile().getId()) ? friendRights : scr.friendRights;
int or = (scr.rightsFor(player) & ScreenRights.MANAGE_OTHER_RIGHTS) == 0 ? scr.otherRights : otherRights; int or = (scr.rightsFor(player) & ScreenRights.MANAGE_OTHER_RIGHTS) == 0 ? scr.otherRights : otherRights;
@ -102,7 +102,7 @@ public class ManageRightsAndUpdgradesControl extends ScreenControl {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
ServerPlayer player = ctx.getSender(); ServerPlayer player = ctx.getSender();
switch (type) { switch (type) {
case UPGRADES -> { case UPGRADES -> {
@ -111,7 +111,7 @@ public class ManageRightsAndUpdgradesControl extends ScreenControl {
else tes.removeUpgrade(side, toRemove, player); else tes.removeUpgrade(side, toRemove, player);
} }
case RIGHTS -> { case RIGHTS -> {
TileEntityScreen.Screen scr = tes.getScreen(side); ScreenBlockEntity.Screen scr = tes.getScreen(side);
int fr = friendRights; int fr = friendRights;
int or = otherRights; int or = otherRights;

View File

@ -10,9 +10,9 @@ import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.NameUUIDPair; import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import java.util.function.Function; import java.util.function.Function;
@ -41,7 +41,7 @@ public class ModifyFriendListControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
ServerPlayer player = ctx.getSender(); ServerPlayer player = ctx.getSender();
checkPerms(ScreenRights.MANAGE_FRIEND_LIST, permissionChecker, ctx.getSender()); checkPerms(ScreenRights.MANAGE_FRIEND_LIST, permissionChecker, ctx.getSender());
if (adding) tes.addFriend(player, side, friend); if (adding) tes.addFriend(player, side, friend);
@ -50,7 +50,7 @@ public class ModifyFriendListControl extends ScreenControl {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
throw new RuntimeException("TODO"); throw new RuntimeException("TODO");
} }
} }

View File

@ -8,9 +8,9 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.NameUUIDPair; import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import java.util.function.Function; import java.util.function.Function;
@ -35,13 +35,13 @@ public class OwnerControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
throw new RuntimeException("Cannot handle ownership theft packet from server"); throw new RuntimeException("Cannot handle ownership theft packet from server");
} }
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
tes.getScreen(side).owner = owner; tes.getScreen(side).owner = owner;
} }
} }

View File

@ -9,10 +9,10 @@ import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Rotation; import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.Vector2i; import net.montoyo.wd.utilities.math.Vector2i;
import java.util.function.Function; import java.util.function.Function;
@ -55,7 +55,7 @@ public class ScreenModifyControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
checkPerms(ScreenRights.MODIFY_SCREEN, permissionChecker, ctx.getSender()); checkPerms(ScreenRights.MODIFY_SCREEN, permissionChecker, ctx.getSender());
switch (type) { switch (type) {
case RESOLUTION -> tes.setResolution(side, res); case RESOLUTION -> tes.setResolution(side, res);
@ -65,7 +65,7 @@ public class ScreenModifyControl extends ScreenControl {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
switch (type) { switch (type) {
case RESOLUTION -> tes.setResolution(side, res); case RESOLUTION -> tes.setResolution(side, res);
case ROTATION -> tes.setRotation(side, rotation); case ROTATION -> tes.setRotation(side, rotation);

View File

@ -9,9 +9,9 @@ import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import java.util.function.Function; import java.util.function.Function;
@ -41,7 +41,7 @@ public class SetURLControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
// TODO: deal with remote // TODO: deal with remote
checkPerms(ScreenRights.CHANGE_URL, permissionChecker, ctx.getSender()); checkPerms(ScreenRights.CHANGE_URL, permissionChecker, ctx.getSender());
try { try {
@ -53,7 +53,7 @@ public class SetURLControl extends ScreenControl {
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
try { try {
tes.setScreenURL(side, url); tes.setScreenURL(side, url);
} catch (Throwable err) { } catch (Throwable err) {

View File

@ -9,9 +9,8 @@ import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.NameUUIDPair;
import java.util.function.Function; import java.util.function.Function;
@ -29,13 +28,13 @@ public class TurnOffControl extends ScreenControl {
} }
@Override @Override
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException { public void handleServer(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
throw new RuntimeException("Cannot handle deactivation packet from server"); throw new RuntimeException("Cannot handle deactivation packet from server");
} }
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) { public void handleClient(BlockPos pos, BlockSide side, ScreenBlockEntity tes, NetworkEvent.Context ctx) {
if (side != null) { if (side != null) {
WebDisplays.PROXY.closeGui(pos, side); WebDisplays.PROXY.closeGui(pos, side);
tes.disableScreen(side); tes.disableScreen(side);

View File

@ -1,24 +0,0 @@
/*
* Copyright (C) 2018 BARBOTIN Nicolas
*/
package net.montoyo.wd.core;
public enum AdvancementIcon {
WEB_DISPLAYS("wd"),
BROKEN_PAD("brokenpad"),
PIGEON("pigeon");
private final String name;
AdvancementIcon(String n) {
name = n;
}
@Override
public String toString() {
return name;
}
}

View File

@ -7,6 +7,7 @@ package net.montoyo.wd.core;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
// TODO: bring this back when SSR is implemented
public class CCArguments implements IComputerArgs { public class CCArguments implements IComputerArgs {
private final Object[] args; private final Object[] args;

View File

@ -5,7 +5,7 @@
package net.montoyo.wd.core; package net.montoyo.wd.core;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.montoyo.wd.init.ItemInit; import net.montoyo.wd.registry.ItemRegistry;
public enum CraftComponent { public enum CraftComponent {
STONEKEY("stonekey", "StoneKey"), STONEKEY("stonekey", "StoneKey"),
@ -32,6 +32,6 @@ public enum CraftComponent {
} }
public ItemStack makeItemStack() { public ItemStack makeItemStack() {
return new ItemStack(ItemInit.getComputerCraftItem(ordinal()).get(), 1); return new ItemStack(ItemRegistry.getComputerCraftItem(ordinal()).get(), 1);
} }
} }

View File

@ -20,9 +20,7 @@ import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
public class Criterion implements CriterionTrigger<Criterion.Instance> { public class Criterion implements CriterionTrigger<Criterion.Instance> {
public static class Instance extends AbstractCriterionTriggerInstance { public static class Instance extends AbstractCriterionTriggerInstance {
public Instance(ResourceLocation id, ContextAwarePredicate arg2) { public Instance(ResourceLocation id, ContextAwarePredicate arg2) {
super(id, arg2); super(id, arg2);
} }
@ -67,10 +65,9 @@ public class Criterion implements CriterionTrigger<Criterion.Instance> {
public void trigger(PlayerAdvancements ply) { public void trigger(PlayerAdvancements ply) {
ArrayList<Listener<Instance>> listeners = map.get(ply); ArrayList<Listener<Instance>> listeners = map.get(ply);
if(listeners != null) { if (listeners != null) {
Listener[] copy = listeners.toArray(new Listener[0]); //We need to make a copy, otherwise we get a ConcurrentModificationException Listener[] copy = listeners.toArray(new Listener[0]); //We need to make a copy, otherwise we get a ConcurrentModificationException
Arrays.stream(copy).forEach(l -> l.run(ply)); Arrays.stream(copy).forEach(l -> l.run(ply));
} }
} }
} }

View File

@ -8,23 +8,22 @@ import net.minecraft.util.StringRepresentable;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.montoyo.wd.entity.TileEntityKeyboard; import net.montoyo.wd.entity.KeyboardBlockEntity;
import net.montoyo.wd.entity.TileEntityRCtrl; import net.montoyo.wd.entity.RemoteControlBlockEntity;
import net.montoyo.wd.entity.TileEntityRedCtrl; import net.montoyo.wd.entity.RedstoneControlBlockEntity;
import net.montoyo.wd.entity.TileEntityServer; import net.montoyo.wd.entity.ServerBlockEntity;
import net.montoyo.wd.init.BlockInit; import net.montoyo.wd.registry.BlockRegistry;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.function.Supplier; import java.util.function.Supplier;
public enum DefaultPeripheral implements StringRepresentable { public enum DefaultPeripheral implements StringRepresentable {
KEYBOARD("keyboard", "Keyboard", KeyboardBlockEntity::new, BlockRegistry.KEYBOARD_BLOCK), //WITH FACING (< 3)
KEYBOARD("keyboard", "Keyboard", TileEntityKeyboard::new, BlockInit.blockKeyBoard), //WITH FACING (< 3)
// CC_INTERFACE("ccinterface", "ComputerCraft_Interface", TileEntityCCInterface.class), // CC_INTERFACE("ccinterface", "ComputerCraft_Interface", TileEntityCCInterface.class),
// OC_INTERFACE("cointerface", "OpenComputers_Interface", TileEntityOCInterface.class), // OC_INTERFACE("cointerface", "OpenComputers_Interface", TileEntityOCInterface.class),
REMOTE_CONTROLLER("remotectrl", "Remote_Controller", TileEntityRCtrl::new ,BlockInit.blockRControl), //WITHOUT FACING (>= 3) REMOTE_CONTROLLER("remotectrl", "Remote_Controller", RemoteControlBlockEntity::new , BlockRegistry.REMOTE_CONTROLLER_BLOCK), //WITHOUT FACING (>= 3)
REDSTONE_CONTROLLER("redstonectrl", "Redstone_Controller", TileEntityRedCtrl::new ,BlockInit.blockRedControl), REDSTONE_CONTROLLER("redstonectrl", "Redstone_Controller", RedstoneControlBlockEntity::new , BlockRegistry.REDSTONE_CONTROL_BLOCK),
SERVER("server", "Server", TileEntityServer::new, BlockInit.blockServer); SERVER("server", "Server", ServerBlockEntity::new, BlockRegistry.SERVER_BLOCK);
private final String name; private final String name;
private final String wikiName; private final String wikiName;

View File

@ -5,9 +5,7 @@
package net.montoyo.wd.core; package net.montoyo.wd.core;
public enum HasAdvancement { public enum HasAdvancement {
DONT_KNOW, DONT_KNOW,
YES, YES,
NO NO
} }

View File

@ -7,10 +7,8 @@ package net.montoyo.wd.core;
import java.util.Map; import java.util.Map;
public interface IComputerArgs { public interface IComputerArgs {
String checkString(int i); String checkString(int i);
int checkInteger(int i); int checkInteger(int i);
Map checkTable(int i); Map checkTable(int i);
int count(); int count();
} }

View File

@ -7,11 +7,9 @@ package net.montoyo.wd.core;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
public interface IPeripheral { public interface IPeripheral {
boolean connect(Level world, BlockPos blockPos, BlockState blockState, Vector3i screenPos, BlockSide screenSide); boolean connect(Level world, BlockPos blockPos, BlockState blockState, Vector3i screenPos, BlockSide screenSide);
} }

View File

@ -6,14 +6,12 @@
// //
//import net.montoyo.mcef.api.IJSQueryCallback; //import net.montoyo.mcef.api.IJSQueryCallback;
//import net.montoyo.wd.entity.TileEntityScreen; //import net.montoyo.wd.entity.TileEntityScreen;
//import net.montoyo.wd.utilities.BlockSide; //import net.montoyo.wd.utilities.orientation.BlockSide;
// //
//import javax.annotation.Nonnull; //import javax.annotation.Nonnull;
// //
//public interface IScreenQueryHandler { //public interface IScreenQueryHandler {
//
// //args is an array of Doubles or Strings // //args is an array of Doubles or Strings
// //The screen DOES exist, so scr.getScreen(side) is never null // //The screen DOES exist, so scr.getScreen(side) is never null
// void handleQuery(@Nonnull IJSQueryCallback cb, @Nonnull TileEntityScreen scr, @Nonnull BlockSide side, @Nonnull Object[] args); // void handleQuery(@Nonnull IJSQueryCallback cb, @Nonnull TileEntityScreen scr, @Nonnull BlockSide side, @Nonnull Object[] args);
//
//} //}

View File

@ -6,17 +6,15 @@ package net.montoyo.wd.core;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public interface IUpgrade { public interface IUpgrade {
void onInstall(@Nonnull ScreenBlockEntity tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is);
void onInstall(@Nonnull TileEntityScreen tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is); boolean onRemove(@Nonnull ScreenBlockEntity tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is); //Return true to prevent dropping
boolean onRemove(@Nonnull TileEntityScreen tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is); //Return true to prevent dropping
boolean isSameUpgrade(@Nonnull ItemStack myStack, @Nonnull ItemStack otherStack); //myStack.getItem() is an instance of this class boolean isSameUpgrade(@Nonnull ItemStack myStack, @Nonnull ItemStack otherStack); //myStack.getItem() is an instance of this class
String getJSName(@Nonnull ItemStack is); //modname:upgradename String getJSName(@Nonnull ItemStack is); //modname:upgradename
} }

View File

@ -5,9 +5,7 @@
package net.montoyo.wd.core; package net.montoyo.wd.core;
public interface IWDDCapability { public interface IWDDCapability {
boolean isFirstRun(); boolean isFirstRun();
void clearFirstRun(); void clearFirstRun();
void cloneTo(IWDDCapability dst); void cloneTo(IWDDCapability dst);
} }

View File

@ -5,10 +5,9 @@
package net.montoyo.wd.core; package net.montoyo.wd.core;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
public enum JSServerRequest { public enum JSServerRequest {
CLEAR_REDSTONE, CLEAR_REDSTONE,
SET_REDSTONE_AT(Integer.class, Integer.class, Boolean.class); SET_REDSTONE_AT(Integer.class, Integer.class, Boolean.class);
@ -50,5 +49,4 @@ public enum JSServerRequest {
return ret; return ret;
} }
} }

View File

@ -7,7 +7,6 @@ package net.montoyo.wd.core;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
public class MissingPermissionException extends Exception { public class MissingPermissionException extends Exception {
private final int permission; private final int permission;
private final ServerPlayer player; private final ServerPlayer player;
@ -24,5 +23,4 @@ public class MissingPermissionException extends Exception {
public ServerPlayer getPlayer() { public ServerPlayer getPlayer() {
return player; return player;
} }
} }

View File

@ -10,7 +10,6 @@ import java.util.Optional;
@Optional.Interface(iface = "net.montoyo.wd.core.IComputerArgs", modid = "opencomputers") @Optional.Interface(iface = "net.montoyo.wd.core.IComputerArgs", modid = "opencomputers")
public class OCArguments implements IComputerArgs { public class OCArguments implements IComputerArgs {
//Keep this as an "Object" so that it doesn't crash if OC is absent //Keep this as an "Object" so that it doesn't crash if OC is absent
private final Object args; private final Object args;
@ -41,5 +40,4 @@ public class OCArguments implements IComputerArgs {
public int count() { public int count() {
return ((Arguments) args).count(); return ((Arguments) args).count();
} }
} */ } */

View File

@ -5,9 +5,10 @@
package net.montoyo.wd.core; package net.montoyo.wd.core;
public abstract class ScreenRights { public abstract class ScreenRights {
public static final int CHANGE_URL = 1; //Change URL AND run JavaScript public static final int CHANGE_URL = 1; //Change URL AND run JavaScript
/** use {@link ScreenRights#INTERACT instead} */ /**
* use {@link ScreenRights#INTERACT instead}
*/
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public static final int CLICK = 2; //Click AND type public static final int CLICK = 2; //Click AND type
public static final int INTERACT = 2; //Click AND type public static final int INTERACT = 2; //Click AND type
@ -21,5 +22,4 @@ public abstract class ScreenRights {
public static final int NONE = 0; public static final int NONE = 0;
public static final int ALL = 0xFF; public static final int ALL = 0xFF;
public static final int DEFAULTS = CHANGE_URL | INTERACT | MANAGE_UPGRADES | MODIFY_SCREEN; public static final int DEFAULTS = CHANGE_URL | INTERACT | MANAGE_UPGRADES | MODIFY_SCREEN;
} }

View File

@ -18,14 +18,11 @@ import javax.annotation.Nonnull;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
public class WDDCapability implements IWDDCapability { public class WDDCapability implements IWDDCapability {
public static class Factory implements Callable<IWDDCapability> { public static class Factory implements Callable<IWDDCapability> {
@Override @Override
public IWDDCapability call() { public IWDDCapability call() {
return new WDDCapability(); return new WDDCapability();
} }
} }
public static class Provider implements ICapabilitySerializable<CompoundTag> { public static class Provider implements ICapabilitySerializable<CompoundTag> {
@ -38,7 +35,7 @@ public class WDDCapability implements IWDDCapability {
@NotNull @NotNull
@Override @Override
public <T> LazyOptional<T> getCapability(@NotNull Capability<T> capability, @org.jetbrains.annotations.Nullable Direction arg) { public <T> LazyOptional<T> getCapability(@NotNull Capability<T> capability, @org.jetbrains.annotations.Nullable Direction arg) {
return cap == capability ? INSTANCE.cast() : LazyOptional.empty(); return cap == capability ? INSTANCE.cast() : LazyOptional.empty();
} }
@Override @Override
@ -78,8 +75,7 @@ public class WDDCapability implements IWDDCapability {
@Override @Override
public void cloneTo(IWDDCapability dst) { public void cloneTo(IWDDCapability dst) {
if(!isFirstRun()) if (!isFirstRun())
dst.clearFirstRun(); dst.clearFirstRun();
} }
} }

View File

@ -18,53 +18,54 @@ import java.util.HashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
public abstract class GuiData { public abstract class GuiData {
public static GuiData read(String name, FriendlyByteBuf buf) { public static GuiData read(String name, FriendlyByteBuf buf) {
GuiType type = dataTable.get(name); GuiType type = dataTable.get(name);
GuiData data = type.create(); GuiData data = type.create();
data.deserialize(buf); data.deserialize(buf);
return data; return data;
} }
protected static class GuiType { protected static class GuiType {
Class<? extends GuiData> clazz; Class<? extends GuiData> clazz;
Supplier<GuiData> constructor; Supplier<GuiData> constructor;
public GuiType(Class<? extends GuiData> clazz, Supplier<GuiData> constructor) { public GuiType(Class<? extends GuiData> clazz, Supplier<GuiData> constructor) {
this.clazz = clazz; this.clazz = clazz;
this.constructor = constructor; this.constructor = constructor;
} }
public GuiData create() { public GuiData create() {
return constructor.get(); return constructor.get();
} }
} }
private static final HashMap<String, GuiType> dataTable = new HashMap<>(); private static final HashMap<String, GuiType> dataTable = new HashMap<>();
static { static {
dataTable.put("SetURL", new GuiType(SetURLData.class, SetURLData::new)); dataTable.put("SetURL", new GuiType(SetURLData.class, SetURLData::new));
dataTable.put("ScreenConfig", new GuiType(ScreenConfigData.class, ScreenConfigData::new)); dataTable.put("ScreenConfig", new GuiType(ScreenConfigData.class, ScreenConfigData::new));
dataTable.put("Keyboard", new GuiType(KeyboardData.class, KeyboardData::new)); dataTable.put("Keyboard", new GuiType(KeyboardData.class, KeyboardData::new));
dataTable.put("RedstoneCtrl", new GuiType(RedstoneCtrlData.class, RedstoneCtrlData::new)); dataTable.put("RedstoneCtrl", new GuiType(RedstoneCtrlData.class, RedstoneCtrlData::new));
dataTable.put("Server", new GuiType(ServerData.class, ServerData::new)); dataTable.put("Server", new GuiType(ServerData.class, ServerData::new));
} }
public static Class<? extends GuiData> classOf(String name) { public static Class<? extends GuiData> classOf(String name) {
return dataTable.get(name).clazz; return dataTable.get(name).clazz;
} }
public GuiData() { public GuiData() {
} }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public abstract Screen createGui(Screen old, Level world); public abstract Screen createGui(Screen old, Level world);
public abstract String getName(); public abstract String getName();
public void sendTo(ServerPlayer player) { public void sendTo(ServerPlayer player) {
WDNetworkRegistry.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new S2CMessageOpenGui(this)); WDNetworkRegistry.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new S2CMessageOpenGui(this));
} }
public abstract void serialize(FriendlyByteBuf buf); public abstract void serialize(FriendlyByteBuf buf);
public abstract void deserialize(FriendlyByteBuf buf); public abstract void deserialize(FriendlyByteBuf buf);
} }

View File

@ -12,13 +12,12 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.montoyo.wd.client.gui.GuiKeyboard; import net.montoyo.wd.client.gui.GuiKeyboard;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
public class KeyboardData extends GuiData { public class KeyboardData extends GuiData {
public Vector3i pos; public Vector3i pos;
public BlockSide side; public BlockSide side;
public int kbX; public int kbX;
@ -28,7 +27,7 @@ public class KeyboardData extends GuiData {
public KeyboardData() { public KeyboardData() {
} }
public KeyboardData(TileEntityScreen tes, BlockSide side, BlockPos kbPos) { public KeyboardData(ScreenBlockEntity tes, BlockSide side, BlockPos kbPos) {
pos = new Vector3i(tes.getBlockPos()); pos = new Vector3i(tes.getBlockPos());
this.side = side; this.side = side;
kbX = kbPos.getX(); kbX = kbPos.getX();
@ -40,12 +39,12 @@ public class KeyboardData extends GuiData {
@Override @Override
public Screen createGui(Screen old, Level world) { public Screen createGui(Screen old, Level world) {
BlockEntity te = world.getBlockEntity(pos.toBlock()); BlockEntity te = world.getBlockEntity(pos.toBlock());
if(te == null || !(te instanceof TileEntityScreen)) { if (te == null || !(te instanceof ScreenBlockEntity)) {
Log.error("TileEntity at %s is not a screen; can't open keyboard!", pos.toString()); Log.error("TileEntity at %s is not a screen; can't open keyboard!", pos.toString());
return null; return null;
} }
return new GuiKeyboard((TileEntityScreen) te, side, new BlockPos(kbX, kbY, kbZ)); return new GuiKeyboard((ScreenBlockEntity) te, side, new BlockPos(kbX, kbY, kbZ));
} }
@Override @Override

View File

@ -13,10 +13,9 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.montoyo.wd.client.gui.GuiRedstoneCtrl; import net.montoyo.wd.client.gui.GuiRedstoneCtrl;
import net.montoyo.wd.net.BufferUtils; import net.montoyo.wd.net.BufferUtils;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
public class RedstoneCtrlData extends GuiData { public class RedstoneCtrlData extends GuiData {
public ResourceLocation dimension; public ResourceLocation dimension;
public Vector3i pos; public Vector3i pos;
public String risingEdgeURL; public String risingEdgeURL;

View File

@ -13,95 +13,94 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PacketDistributor;
import net.montoyo.wd.client.gui.GuiScreenConfig; import net.montoyo.wd.client.gui.GuiScreenConfig;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.net.BufferUtils; import net.montoyo.wd.net.BufferUtils;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.client_bound.S2CMessageOpenGui; import net.montoyo.wd.net.client_bound.S2CMessageOpenGui;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.NameUUIDPair; import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
public class ScreenConfigData extends GuiData { public class ScreenConfigData extends GuiData {
public boolean onlyUpdate;
public Vector3i pos;
public BlockSide side;
public NameUUIDPair[] friends;
public int friendRights;
public int otherRights;
public boolean onlyUpdate; public ScreenConfigData() {
public Vector3i pos; }
public BlockSide side;
public NameUUIDPair[] friends;
public int friendRights;
public int otherRights;
public ScreenConfigData() { public ScreenConfigData(Vector3i pos, BlockSide side, ScreenBlockEntity.Screen scr) {
} this.pos = pos;
this.side = side;
friends = scr.friends.toArray(new NameUUIDPair[0]);
friendRights = scr.friendRights;
otherRights = scr.otherRights;
onlyUpdate = false;
}
public ScreenConfigData(Vector3i pos, BlockSide side, TileEntityScreen.Screen scr) { @OnlyIn(Dist.CLIENT)
this.pos = pos; @Override
this.side = side; public Screen createGui(Screen old, Level world) {
friends = scr.friends.toArray(new NameUUIDPair[0]); if (old != null && old instanceof GuiScreenConfig) {
friendRights = scr.friendRights; GuiScreenConfig gsc = (GuiScreenConfig) old;
otherRights = scr.otherRights;
onlyUpdate = false;
}
@OnlyIn(Dist.CLIENT) if (gsc.isForBlock(pos.toBlock(), side)) {
@Override gsc.updateFriends(friends);
public Screen createGui(Screen old, Level world) { gsc.updateFriendRights(friendRights);
if (old != null && old instanceof GuiScreenConfig) { gsc.updateOtherRights(otherRights);
GuiScreenConfig gsc = (GuiScreenConfig) old; gsc.updateMyRights();
if (gsc.isForBlock(pos.toBlock(), side)) { return null;
gsc.updateFriends(friends); }
gsc.updateFriendRights(friendRights); }
gsc.updateOtherRights(otherRights);
gsc.updateMyRights();
return null; if (onlyUpdate)
} return null;
}
if (onlyUpdate) BlockEntity te = world.getBlockEntity(pos.toBlock());
return null; if (te == null || !(te instanceof ScreenBlockEntity)) {
Log.error("TileEntity at %s is not a screen; can't open gui!", pos.toString());
return null;
}
BlockEntity te = world.getBlockEntity(pos.toBlock()); return new GuiScreenConfig(Component.nullToEmpty(""), (ScreenBlockEntity) te, side, friends, friendRights, otherRights);
if (te == null || !(te instanceof TileEntityScreen)) { }
Log.error("TileEntity at %s is not a screen; can't open gui!", pos.toString());
return null;
}
return new GuiScreenConfig(Component.nullToEmpty(""), (TileEntityScreen) te, side, friends, friendRights, otherRights); @Override
} public String getName() {
return "ScreenConfig";
}
@Override public ScreenConfigData updateOnly() {
public String getName() { onlyUpdate = true;
return "ScreenConfig"; return this;
} }
public ScreenConfigData updateOnly() { public void sendTo(PacketDistributor.TargetPoint tp) {
onlyUpdate = true; WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> tp), new S2CMessageOpenGui(this));
return this; }
}
public void sendTo(PacketDistributor.TargetPoint tp) { @Override
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> tp), new S2CMessageOpenGui(this)); public void serialize(FriendlyByteBuf buf) {
} buf.writeBoolean(onlyUpdate);
BufferUtils.writeVec3i(buf, pos);
BufferUtils.writeEnum(buf, side, (byte) 1);
BufferUtils.writeArray(buf, friends, (nameUUIDPair) -> nameUUIDPair.writeTo(buf));
buf.writeInt(friendRights);
buf.writeInt(otherRights);
}
@Override @Override
public void serialize(FriendlyByteBuf buf) { public void deserialize(FriendlyByteBuf buf) {
buf.writeBoolean(onlyUpdate); onlyUpdate = buf.readBoolean();
BufferUtils.writeVec3i(buf, pos); pos = BufferUtils.readVec3i(buf);
BufferUtils.writeEnum(buf, side, (byte) 1); side = (BlockSide) BufferUtils.readEnum(buf, (v) -> BlockSide.values()[v], (byte) 1);
BufferUtils.writeArray(buf, friends, (nameUUIDPair) -> nameUUIDPair.writeTo(buf)); friends = BufferUtils.readArray(buf, new NameUUIDPair[0], () -> new NameUUIDPair(buf));
buf.writeInt(friendRights); friendRights = buf.readInt();
buf.writeInt(otherRights); otherRights = buf.readInt();
} }
@Override
public void deserialize(FriendlyByteBuf buf) {
onlyUpdate = buf.readBoolean();
pos = BufferUtils.readVec3i(buf);
side = (BlockSide) BufferUtils.readEnum(buf, (v) -> BlockSide.values()[v], (byte) 1);
friends = BufferUtils.readArray(buf, new NameUUIDPair[0], () -> new NameUUIDPair(buf));
friendRights = buf.readInt();
otherRights = buf.readInt();
}
} }

View File

@ -12,11 +12,10 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.montoyo.wd.client.gui.GuiServer; import net.montoyo.wd.client.gui.GuiServer;
import net.montoyo.wd.net.BufferUtils; import net.montoyo.wd.net.BufferUtils;
import net.montoyo.wd.utilities.NameUUIDPair; import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
public class ServerData extends GuiData { public class ServerData extends GuiData {
public Vector3i pos; public Vector3i pos;
public NameUUIDPair owner; public NameUUIDPair owner;

View File

@ -12,14 +12,13 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.montoyo.wd.client.gui.GuiSetURL2; import net.montoyo.wd.client.gui.GuiSetURL2;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.net.BufferUtils; import net.montoyo.wd.net.BufferUtils;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
public class SetURLData extends GuiData { public class SetURLData extends GuiData {
public Vector3i pos; public Vector3i pos;
public BlockSide side; public BlockSide side;
public String url; public String url;
@ -50,12 +49,12 @@ public class SetURLData extends GuiData {
@Override @Override
public Screen createGui(Screen old, Level world) { public Screen createGui(Screen old, Level world) {
BlockEntity te = world.getBlockEntity(pos.toBlock()); BlockEntity te = world.getBlockEntity(pos.toBlock());
if(te == null || !(te instanceof TileEntityScreen)) { if (te == null || !(te instanceof ScreenBlockEntity)) {
Log.error("TileEntity at %s is not a screen; can't open gui!", pos.toString()); Log.error("TileEntity at %s is not a screen; can't open gui!", pos.toString());
return null; return null;
} }
return new GuiSetURL2((TileEntityScreen) te, side, url, isRemote ? remoteLocation : null); return new GuiSetURL2((ScreenBlockEntity) te, side, url, isRemote ? remoteLocation : null);
} }
@Override @Override

View File

@ -13,7 +13,11 @@ import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.core.IComputerArgs; import net.montoyo.wd.core.IComputerArgs;
import net.montoyo.wd.core.IUpgrade; import net.montoyo.wd.core.IUpgrade;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import net.montoyo.wd.utilities.serialization.TypeData;
import net.montoyo.wd.utilities.serialization.Util;
import java.io.IOException; import java.io.IOException;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
@ -23,9 +27,8 @@ import java.lang.annotation.Target;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Map; import java.util.Map;
public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase { public abstract class AbstractInterfaceBlockEntity extends AbstractPeripheralBlockEntity {
public AbstractInterfaceBlockEntity(BlockEntityType<?> arg, BlockPos arg2, BlockState arg3) {
public TileEntityInterfaceBase(BlockEntityType<?> arg, BlockPos arg2, BlockState arg3) {
super(arg, arg2, arg3); super(arg, arg2, arg3);
} }
@ -108,7 +111,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
throw new IllegalArgumentException("invalid right name"); throw new IllegalArgumentException("invalid right name");
} }
TileEntityScreen tes = getConnectedScreenEx(); ScreenBlockEntity tes = getConnectedScreenEx();
if(owner == null || tes == null) if(owner == null || tes == null)
return null; return null;
else else
@ -119,7 +122,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
public Object[] hasUpgrade(IComputerArgs args) { public Object[] hasUpgrade(IComputerArgs args) {
String name = args.checkString(0); String name = args.checkString(0);
TileEntityScreen tes = getConnectedScreenEx(); ScreenBlockEntity tes = getConnectedScreenEx();
if(owner == null || tes == null) if(owner == null || tes == null)
return null; return null;
else else
@ -128,7 +131,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
@ComputerFunc @ComputerFunc
public Object[] getSize(IComputerArgs args) { public Object[] getSize(IComputerArgs args) {
TileEntityScreen tes = getConnectedScreenEx(); ScreenBlockEntity tes = getConnectedScreenEx();
if(owner == null || tes == null) if(owner == null || tes == null)
return null; return null;
@ -140,7 +143,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
@ComputerFunc @ComputerFunc
public Object[] getResolution(IComputerArgs args) { public Object[] getResolution(IComputerArgs args) {
TileEntityScreen tes = getConnectedScreenEx(); ScreenBlockEntity tes = getConnectedScreenEx();
if(owner == null || tes == null) if(owner == null || tes == null)
return null; return null;
@ -152,7 +155,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
@ComputerFunc @ComputerFunc
public Object[] getRotation(IComputerArgs args) { public Object[] getRotation(IComputerArgs args) {
TileEntityScreen tes = getConnectedScreenEx(); ScreenBlockEntity tes = getConnectedScreenEx();
if(owner == null || tes == null) if(owner == null || tes == null)
return null; return null;
@ -162,7 +165,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
@ComputerFunc @ComputerFunc
public Object[] getURL(IComputerArgs args) { public Object[] getURL(IComputerArgs args) {
TileEntityScreen tes = getConnectedScreenEx(); ScreenBlockEntity tes = getConnectedScreenEx();
if(owner == null || tes == null) if(owner == null || tes == null)
return null; return null;
@ -206,12 +209,12 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
// throw new IllegalArgumentException("bad action name"); // throw new IllegalArgumentException("bad action name");
// } // }
TileEntityScreen scr = getConnectedScreenEx(); ScreenBlockEntity scr = getConnectedScreenEx();
if(owner == null || scr == null) if(owner == null || scr == null)
return err("notlinked"); return err("notlinked");
else { else {
TileEntityScreen.Screen scrscr = scr.getScreen(screenSide); ScreenBlockEntity.Screen scrscr = scr.getScreen(screenSide);
if((scrscr.rightsFor(owner.uuid) & ScreenRights.INTERACT) == 0) if((scrscr.rightsFor(owner.uuid) & ScreenRights.INTERACT) == 0)
return err("restrictions"); return err("restrictions");
@ -245,7 +248,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
} }
private Object[] realType(String what) { private Object[] realType(String what) {
TileEntityScreen scr = getConnectedScreenEx(); ScreenBlockEntity scr = getConnectedScreenEx();
if(owner == null || scr == null) if(owner == null || scr == null)
return err("notlinked"); return err("notlinked");
@ -326,7 +329,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
@ComputerFunc @ComputerFunc
public Object[] setURL(IComputerArgs args) { public Object[] setURL(IComputerArgs args) {
String url = args.checkString(0); String url = args.checkString(0);
TileEntityScreen scr = getConnectedScreenEx(); ScreenBlockEntity scr = getConnectedScreenEx();
if(owner == null || scr == null) if(owner == null || scr == null)
return err("notlinked"); return err("notlinked");
@ -346,7 +349,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
public Object[] setResolution(IComputerArgs args) { public Object[] setResolution(IComputerArgs args) {
int rx = args.checkInteger(0); int rx = args.checkInteger(0);
int ry = args.checkInteger(1); int ry = args.checkInteger(1);
TileEntityScreen scr = getConnectedScreenEx(); ScreenBlockEntity scr = getConnectedScreenEx();
if(owner == null || scr == null) if(owner == null || scr == null)
return err("notlinked"); return err("notlinked");
@ -369,7 +372,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
rot /= 90; rot /= 90;
rot &= 3; rot &= 3;
TileEntityScreen scr = getConnectedScreenEx(); ScreenBlockEntity scr = getConnectedScreenEx();
if(owner == null || scr == null) if(owner == null || scr == null)
return err("notlinked"); return err("notlinked");
@ -384,7 +387,7 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
@ComputerFunc @ComputerFunc
public Object[] runJS(IComputerArgs args) { public Object[] runJS(IComputerArgs args) {
String code = args.checkString(0); String code = args.checkString(0);
TileEntityScreen scr = getConnectedScreenEx(); ScreenBlockEntity scr = getConnectedScreenEx();
if(owner == null || scr == null) if(owner == null || scr == null)
return err("notlinked"); return err("notlinked");
@ -406,5 +409,4 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
return null; return null;
} }
} }

View File

@ -16,20 +16,19 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunk;
import net.montoyo.wd.core.IPeripheral; import net.montoyo.wd.core.IPeripheral;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Objects; import java.util.Objects;
public abstract class TileEntityPeripheralBase extends BlockEntity implements IPeripheral { public abstract class AbstractPeripheralBlockEntity extends BlockEntity implements IPeripheral {
protected Vector3i screenPos; protected Vector3i screenPos;
protected BlockSide screenSide; protected BlockSide screenSide;
public TileEntityPeripheralBase(BlockEntityType<?> arg, BlockPos arg2, BlockState arg3) { public AbstractPeripheralBlockEntity(BlockEntityType<?> arg, BlockPos arg2, BlockState arg3) {
super(arg, arg2, arg3); super(arg, arg2, arg3);
} }
@ -38,7 +37,7 @@ public abstract class TileEntityPeripheralBase extends BlockEntity implements IP
public void load(CompoundTag tag) { public void load(CompoundTag tag) {
super.load(tag); super.load(tag);
if(tag.contains("WDScreen", 10)) { if (tag.contains("WDScreen", 10)) {
CompoundTag scr = tag.getCompound("WDScreen"); CompoundTag scr = tag.getCompound("WDScreen");
screenPos = new Vector3i(scr.getInt("X"), scr.getInt("Y"), scr.getInt("Z")); screenPos = new Vector3i(scr.getInt("X"), scr.getInt("Y"), scr.getInt("Z"));
screenSide = BlockSide.values()[scr.getByte("Side")]; screenSide = BlockSide.values()[scr.getByte("Side")];
@ -52,7 +51,7 @@ public abstract class TileEntityPeripheralBase extends BlockEntity implements IP
protected void saveAdditional(CompoundTag tag) { protected void saveAdditional(CompoundTag tag) {
super.saveAdditional(tag); super.saveAdditional(tag);
if(screenPos != null && screenSide != null) { if (screenPos != null && screenSide != null) {
CompoundTag scr = new CompoundTag(); CompoundTag scr = new CompoundTag();
scr.putInt("X", screenPos.x); scr.putInt("X", screenPos.x);
scr.putInt("Y", screenPos.y); scr.putInt("Y", screenPos.y);
@ -79,12 +78,12 @@ public abstract class TileEntityPeripheralBase extends BlockEntity implements IP
@Override @Override
public boolean connect(Level world_, BlockPos blockPos, BlockState blockState, Vector3i pos, BlockSide side) { public boolean connect(Level world_, BlockPos blockPos, BlockState blockState, Vector3i pos, BlockSide side) {
BlockEntity te = world_.getBlockEntity(pos.toBlock()); BlockEntity te = world_.getBlockEntity(pos.toBlock());
if(te == null || !(te instanceof TileEntityScreen)) { if (!(te instanceof ScreenBlockEntity)) {
Log.error("TileEntityPeripheralBase.connect(): Tile entity at %s is not a screen!", pos.toString()); Log.error("TileEntityPeripheralBase.connect(): Tile entity at %s is not a screen!", pos.toString());
return false; return false;
} }
if(((TileEntityScreen) te).getScreen(side) == null) { if (((ScreenBlockEntity) te).getScreen(side) == null) {
Log.error("TileEntityPeripheralBase.connect(): There is no screen at %s on side %s!", pos.toString(), side.toString()); Log.error("TileEntityPeripheralBase.connect(): There is no screen at %s on side %s!", pos.toString(), side.toString());
return false; return false;
} }
@ -108,31 +107,31 @@ public abstract class TileEntityPeripheralBase extends BlockEntity implements IP
} }
@Nullable @Nullable
public TileEntityScreen getConnectedScreen() { public ScreenBlockEntity getConnectedScreen() {
if(screenPos == null || screenSide == null) if (screenPos == null || screenSide == null)
return null; return null;
BlockEntity te = level.getBlockEntity(screenPos.toBlock()); BlockEntity te = level.getBlockEntity(screenPos.toBlock());
if(te == null || !(te instanceof TileEntityScreen) || ((TileEntityScreen) te).getScreen(screenSide) == null) { if (!(te instanceof ScreenBlockEntity) || ((ScreenBlockEntity) te).getScreen(screenSide) == null) {
screenPos = null; screenPos = null;
screenSide = null; screenSide = null;
setChanged(); setChanged();
return null; return null;
} }
return (TileEntityScreen) te; return (ScreenBlockEntity) te;
} }
@Nullable @Nullable
public TileEntityScreen getConnectedScreenEx() { public ScreenBlockEntity getConnectedScreenEx() {
if(screenPos == null || screenSide == null) if (screenPos == null || screenSide == null)
return null; return null;
BlockEntity te = level.getBlockEntity(screenPos.toBlock()); BlockEntity te = level.getBlockEntity(screenPos.toBlock());
if(te == null || !(te instanceof TileEntityScreen) || ((TileEntityScreen) te).getScreen(screenSide) == null) if (!(te instanceof ScreenBlockEntity) || ((ScreenBlockEntity) te).getScreen(screenSide) == null)
return null; return null;
return (TileEntityScreen) te; return (ScreenBlockEntity) te;
} }
@Nullable @Nullable

View File

@ -3,6 +3,7 @@
*/ */
package net.montoyo.wd.entity; package net.montoyo.wd.entity;
/* /*
import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.ILuaContext;
import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.lua.LuaException;
@ -19,18 +20,17 @@ import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
@Optional.Interface(iface = "dan200.computercraft.api.peripheral.IPeripheral", modid = "computercraft") @Optional.Interface(iface = "dan200.computercraft.api.peripheral.IPeripheral", modid = "computercraft")
public class TileEntityCCInterface extends TileEntityInterfaceBase implements IPeripheral { public class CCInterfaceBlockEntity extends AbstractInterfaceBlockEntity implements IPeripheral {
private static final String[] METHOD_NAMES; private static final String[] METHOD_NAMES;
private static final Method[] METHODS; private static final Method[] METHODS;
static { static {
ArrayList<String> names = new ArrayList<>(); ArrayList<String> names = new ArrayList<>();
ArrayList<Method> methods = new ArrayList<>(); ArrayList<Method> methods = new ArrayList<>();
Method[] src = TileEntityInterfaceBase.class.getMethods(); Method[] src = AbstractInterfaceBlockEntity.class.getMethods();
for(Method m: src) { for(Method m: src) {
if(m.getAnnotation(TileEntityInterfaceBase.ComputerFunc.class) != null) { if(m.getAnnotation(AbstractInterfaceBlockEntity.ComputerFunc.class) != null) {
if(m.getParameterCount() != 1 || m.getParameterTypes()[0] != IComputerArgs.class) if(m.getParameterCount() != 1 || m.getParameterTypes()[0] != IComputerArgs.class)
throw new RuntimeException("Found @ComputerFunc method with invalid arguments"); throw new RuntimeException("Found @ComputerFunc method with invalid arguments");
@ -79,5 +79,4 @@ public class TileEntityCCInterface extends TileEntityInterfaceBase implements IP
public boolean equals(@Nullable IPeripheral periph) { public boolean equals(@Nullable IPeripheral periph) {
return periph == this; return periph == this;
} }
}*/ }*/

View File

@ -15,15 +15,14 @@ import net.minecraft.world.level.block.state.BlockState;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.data.KeyboardData; import net.montoyo.wd.data.KeyboardData;
import net.montoyo.wd.init.TileInit; import net.montoyo.wd.registry.TileRegistry;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
public class TileEntityKeyboard extends TileEntityPeripheralBase {
public class KeyboardBlockEntity extends AbstractPeripheralBlockEntity {
private static final String RANDOM_CHARS = "AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn0123456789"; //Yes I have an AZERTY keyboard, u care? private static final String RANDOM_CHARS = "AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn0123456789"; //Yes I have an AZERTY keyboard, u care?
public TileEntityKeyboard(BlockPos arg2, BlockState arg3) { public KeyboardBlockEntity(BlockPos arg2, BlockState arg3) {
super(TileInit.KEYBOARD.get(), arg2, arg3); super(TileRegistry.KEYBOARD.get(), arg2, arg3);
} }
@Override @Override
@ -36,13 +35,13 @@ public class TileEntityKeyboard extends TileEntityPeripheralBase {
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
TileEntityScreen tes = getConnectedScreen(); ScreenBlockEntity tes = getConnectedScreen();
if(tes == null) { if(tes == null) {
Util.toast(player, "notLinked"); Util.toast(player, "notLinked");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
TileEntityScreen.Screen scr = tes.getScreen(screenSide); ScreenBlockEntity.Screen scr = tes.getScreen(screenSide);
if((scr.rightsFor(player) & ScreenRights.INTERACT) == 0) { if((scr.rightsFor(player) & ScreenRights.INTERACT) == 0) {
Util.toast(player, "restrictions"); Util.toast(player, "restrictions");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
@ -56,10 +55,10 @@ public class TileEntityKeyboard extends TileEntityPeripheralBase {
if(!isScreenChunkLoaded()) if(!isScreenChunkLoaded())
return; return;
TileEntityScreen tes = getConnectedScreen(); ScreenBlockEntity tes = getConnectedScreen();
if(tes != null) { if(tes != null) {
TileEntityScreen.Screen scr = tes.getScreen(screenSide); ScreenBlockEntity.Screen scr = tes.getScreen(screenSide);
boolean ok; boolean ok;
if(ent instanceof Player) if(ent instanceof Player)
@ -72,10 +71,9 @@ public class TileEntityKeyboard extends TileEntityPeripheralBase {
tes.type(screenSide, "t" + rnd, getBlockPos()); tes.type(screenSide, "t" + rnd, getBlockPos());
Player owner = level.getPlayerByUUID(scr.owner.uuid); Player owner = level.getPlayerByUUID(scr.owner.uuid);
if(owner != null && owner instanceof ServerPlayer && ent instanceof Ocelot) if(owner instanceof ServerPlayer && ent instanceof Ocelot)
WebDisplays.INSTANCE.criterionKeyboardCat.trigger(((ServerPlayer) owner).getAdvancements()); WebDisplays.INSTANCE.criterionKeyboardCat.trigger(((ServerPlayer) owner).getAdvancements());
} }
} }
} }
} }

View File

@ -13,8 +13,7 @@ import net.minecraftforge.fml.common.Optional;
import net.montoyo.wd.core.OCArguments; import net.montoyo.wd.core.OCArguments;
@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers") @Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")
public class TileEntityOCInterface extends TileEntityInterfaceBase implements SimpleComponent { public class OCInterfaceBlockEntity extends AbstractInterfaceBlockEntity implements SimpleComponent {
@Override @Override
public String getComponentName() { public String getComponentName() {
return "webdisplays"; return "webdisplays";
@ -133,5 +132,4 @@ public class TileEntityOCInterface extends TileEntityInterfaceBase implements Si
public Object[] unlink(Context ctx, Arguments args) { public Object[] unlink(Context ctx, Arguments args) {
return unlink(new OCArguments(args)); return unlink(new OCArguments(args));
} }
}*/ }*/

View File

@ -14,19 +14,18 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.data.RedstoneCtrlData; import net.montoyo.wd.data.RedstoneCtrlData;
import net.montoyo.wd.init.TileInit; import net.montoyo.wd.registry.TileRegistry;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import java.io.IOException; import java.io.IOException;
public class TileEntityRedCtrl extends TileEntityPeripheralBase { public class RedstoneControlBlockEntity extends AbstractPeripheralBlockEntity {
private String risingEdgeURL = ""; private String risingEdgeURL = "";
private String fallingEdgeURL = ""; private String fallingEdgeURL = "";
private boolean state = false; private boolean state = false;
public TileEntityRedCtrl(BlockPos arg2, BlockState arg3) { public RedstoneControlBlockEntity(BlockPos arg2, BlockState arg3) {
super(TileInit.REDSTONE_CONTROLLER.get(), arg2, arg3); super(TileRegistry.REDSTONE_CONTROLLER.get(), arg2, arg3);
} }
@Override @Override
@ -48,22 +47,22 @@ public class TileEntityRedCtrl extends TileEntityPeripheralBase {
@Override @Override
public InteractionResult onRightClick(Player player, InteractionHand hand) { public InteractionResult onRightClick(Player player, InteractionHand hand) {
if(level.isClientSide) if (level.isClientSide)
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
if(!isScreenChunkLoaded()) { if (!isScreenChunkLoaded()) {
Util.toast(player, "chunkUnloaded"); Util.toast(player, "chunkUnloaded");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
TileEntityScreen tes = getConnectedScreen(); ScreenBlockEntity tes = getConnectedScreen();
if(tes == null) { if (tes == null) {
Util.toast(player, "notLinked"); Util.toast(player, "notLinked");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
TileEntityScreen.Screen scr = tes.getScreen(screenSide); ScreenBlockEntity.Screen scr = tes.getScreen(screenSide);
if((scr.rightsFor(player) & ScreenRights.CHANGE_URL) == 0) { if ((scr.rightsFor(player) & ScreenRights.CHANGE_URL) == 0) {
Util.toast(player, "restrictions"); Util.toast(player, "restrictions");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
@ -76,10 +75,10 @@ public class TileEntityRedCtrl extends TileEntityPeripheralBase {
public void onNeighborChange(Block neighborType, BlockPos neighborPos) { public void onNeighborChange(Block neighborType, BlockPos neighborPos) {
boolean hasPower = (level.hasNeighborSignal(getBlockPos()) || level.hasNeighborSignal(getBlockPos().above())); //Same as dispenser boolean hasPower = (level.hasNeighborSignal(getBlockPos()) || level.hasNeighborSignal(getBlockPos().above())); //Same as dispenser
if(hasPower != state) { if (hasPower != state) {
state = hasPower; state = hasPower;
if(state) //Rising edge if (state) //Rising edge
changeURL(risingEdgeURL); changeURL(risingEdgeURL);
else //Falling edge else //Falling edge
changeURL(fallingEdgeURL); changeURL(fallingEdgeURL);
@ -93,11 +92,11 @@ public class TileEntityRedCtrl extends TileEntityPeripheralBase {
} }
private void changeURL(String url) { private void changeURL(String url) {
if(level.isClientSide || url.isEmpty()) if (level.isClientSide || url.isEmpty())
return; return;
if(isScreenChunkLoaded()) { if (isScreenChunkLoaded()) {
TileEntityScreen tes = getConnectedScreen(); ScreenBlockEntity tes = getConnectedScreen();
if (tes != null) if (tes != null)
try { try {

View File

@ -12,32 +12,32 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.data.SetURLData; import net.montoyo.wd.data.SetURLData;
import net.montoyo.wd.init.TileInit; import net.montoyo.wd.registry.TileRegistry;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
public class TileEntityRCtrl extends TileEntityPeripheralBase { public class RemoteControlBlockEntity extends AbstractPeripheralBlockEntity {
public TileEntityRCtrl(BlockPos arg2, BlockState arg3) { public RemoteControlBlockEntity(BlockPos arg2, BlockState arg3) {
super(TileInit.REMOTE_CONTROLLER.get(), arg2, arg3); super(TileRegistry.REMOTE_CONTROLLER.get(), arg2, arg3);
} }
@Override @Override
public InteractionResult onRightClick(Player player, InteractionHand hand) { public InteractionResult onRightClick(Player player, InteractionHand hand) {
if(level.isClientSide) if (level.isClientSide)
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
if(!isScreenChunkLoaded()) { if (!isScreenChunkLoaded()) {
Util.toast(player, "chunkUnloaded"); Util.toast(player, "chunkUnloaded");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
TileEntityScreen tes = getConnectedScreen(); ScreenBlockEntity tes = getConnectedScreen();
if(tes == null) { if (tes == null) {
Util.toast(player, "notLinked"); Util.toast(player, "notLinked");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
TileEntityScreen.Screen scr = tes.getScreen(screenSide); ScreenBlockEntity.Screen scr = tes.getScreen(screenSide);
if((scr.rightsFor(player) & ScreenRights.CHANGE_URL) == 0) { if ((scr.rightsFor(player) & ScreenRights.CHANGE_URL) == 0) {
Util.toast(player, "restrictions"); Util.toast(player, "restrictions");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
@ -45,5 +45,4 @@ public class TileEntityRCtrl extends TileEntityPeripheralBase {
(new SetURLData(screenPos, screenSide, scr.url, getBlockPos())).sendTo((ServerPlayer) player); (new SetURLData(screenPos, screenSide, scr.url, getBlockPos())).sendTo((ServerPlayer) player);
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
} }

View File

@ -25,43 +25,45 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PacketDistributor;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.block.BlockScreen; import net.montoyo.wd.block.ScreenBlock;
import net.montoyo.wd.client.ClientProxy; import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.config.CommonConfig; import net.montoyo.wd.config.CommonConfig;
import net.montoyo.wd.controls.builtin.ClickControl; import net.montoyo.wd.controls.builtin.ClickControl;
import net.montoyo.wd.core.DefaultUpgrade; import net.montoyo.wd.core.DefaultUpgrade;
import net.montoyo.wd.core.IUpgrade; import net.montoyo.wd.core.IUpgrade;
import net.montoyo.wd.core.JSServerRequest;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.data.ScreenConfigData; import net.montoyo.wd.data.ScreenConfigData;
import net.montoyo.wd.init.BlockInit; import net.montoyo.wd.registry.BlockRegistry;
import net.montoyo.wd.init.ItemInit; import net.montoyo.wd.registry.ItemRegistry;
import net.montoyo.wd.init.TileInit; import net.montoyo.wd.registry.TileRegistry;
import net.montoyo.wd.miniserv.SyncPlugin; import net.montoyo.wd.miniserv.SyncPlugin;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.client_bound.S2CMessageAddScreen; import net.montoyo.wd.net.client_bound.S2CMessageAddScreen;
import net.montoyo.wd.net.client_bound.S2CMessageCloseGui;
import net.montoyo.wd.net.client_bound.S2CMessageJSResponse;
import net.montoyo.wd.net.client_bound.S2CMessageScreenUpdate; import net.montoyo.wd.net.client_bound.S2CMessageScreenUpdate;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.MutableAABB;
import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3f;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import net.montoyo.wd.utilities.serialization.TypeData;
import org.cef.browser.CefBrowser; import org.cef.browser.CefBrowser;
import org.lwjgl.opengl.GL11;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.function.Consumer; import java.util.function.Consumer;
import static net.montoyo.wd.block.BlockPeripheral.point; import static net.montoyo.wd.block.PeripheralBlock.point;
public class TileEntityScreen extends BlockEntity { public class ScreenBlockEntity extends BlockEntity {
public ScreenBlockEntity(BlockPos arg2, BlockState arg3) {
public TileEntityScreen(BlockPos arg2, BlockState arg3) { super(TileRegistry.SCREEN_BLOCK_ENTITY.get(), arg2, arg3);
super(TileInit.SCREEN_BLOCK_ENTITY.get(), arg2, arg3);
} }
public static class Screen { public static class Screen {
@ -202,6 +204,7 @@ public class TileEntityScreen extends BlockEntity {
final Direction facing = VALUES[side.reverse().ordinal()]; final Direction facing = VALUES[side.reverse().ordinal()];
final ScreenIterator it = new ScreenIterator(start, side, size); final ScreenIterator it = new ScreenIterator(start, side, size);
// TODO: cache chunk
while (it.hasNext()) { while (it.hasNext()) {
int idx = it.getIndex(); int idx = it.getIndex();
redstoneStatus.set(idx, world.getSignal(it.next(), facing)); redstoneStatus.set(idx, world.getSignal(it.next(), facing));
@ -252,6 +255,7 @@ public class TileEntityScreen extends BlockEntity {
if (scr != null) { if (scr != null) {
ScreenIterator it = new ScreenIterator(getBlockPos(), side, scr.size); ScreenIterator it = new ScreenIterator(getBlockPos(), side, scr.size);
// TODO: cache chunk
while (it.hasNext()) while (it.hasNext())
func.accept(it.next()); func.accept(it.next());
} }
@ -277,6 +281,7 @@ public class TileEntityScreen extends BlockEntity {
scr.browser = null; scr.browser = null;
} }
} }
screens.clear();
loaded = false; loaded = false;
} }
@ -289,6 +294,14 @@ public class TileEntityScreen extends BlockEntity {
if (list.isEmpty()) if (list.isEmpty())
return; return;
// very important to close these
for (Screen screen : screens) {
if (screen.browser != null) {
screen.browser.close(true);
screen.browser = null;
}
}
screens.clear(); screens.clear();
for (int i = 0; i < list.size(); i++) for (int i = 0; i < list.size(); i++)
screens.add(Screen.deserialize(list.getCompound(i))); screens.add(Screen.deserialize(list.getCompound(i)));
@ -403,17 +416,18 @@ public class TileEntityScreen extends BlockEntity {
} }
public void clear() { public void clear() {
// very important that these get closed
for (Screen screen : screens)
if (screen.browser != null) {
screen.browser.close(true);
screen.browser = null;
}
screens.clear(); screens.clear();
if (!level.isClientSide) if (!level.isClientSide)
setChanged(); setChanged();
} }
public void requestData(ServerPlayer ep) {
if (!level.isClientSide)
WDNetworkRegistry.INSTANCE.send(PacketDistributor.PLAYER.with(() -> ep), new S2CMessageAddScreen(this));
}
public static String url(String url) throws IOException { public static String url(String url) throws IOException {
System.out.println("URL received: " + url); System.out.println("URL received: " + url);
if (!(WebDisplays.PROXY instanceof ClientProxy)) { if (!(WebDisplays.PROXY instanceof ClientProxy)) {
@ -450,6 +464,7 @@ public class TileEntityScreen extends BlockEntity {
} }
} }
// TODO: is there a reason this is unused?
public void removeScreen(BlockSide side) { public void removeScreen(BlockSide side) {
int idx = -1; int idx = -1;
for (int i = 0; i < screens.size(); i++) { for (int i = 0; i < screens.size(); i++) {
@ -476,7 +491,7 @@ public class TileEntityScreen extends BlockEntity {
if (!level.isClientSide) { if (!level.isClientSide) {
if (screens.isEmpty()) //No more screens: remove tile entity if (screens.isEmpty()) //No more screens: remove tile entity
level.setBlockAndUpdate(getBlockPos(), BlockInit.blockScreen.get().defaultBlockState().setValue(BlockScreen.hasTE, false)); level.setBlockAndUpdate(getBlockPos(), BlockRegistry.SCREEN_BLOCk.get().defaultBlockState().setValue(ScreenBlock.hasTE, false));
else else
setChanged(); setChanged();
} }
@ -512,7 +527,7 @@ public class TileEntityScreen extends BlockEntity {
private static Player getLaserUser(Screen scr) { private static Player getLaserUser(Screen scr) {
if (scr.laserUser != null) { if (scr.laserUser != null) {
if (scr.laserUser.isRemoved() || !scr.laserUser.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemInit.LASER_POINTER.get())) if (scr.laserUser.isRemoved() || !scr.laserUser.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemRegistry.LASER_POINTER.get()))
scr.laserUser = null; scr.laserUser = null;
} }
@ -544,13 +559,6 @@ public class TileEntityScreen extends BlockEntity {
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(level, getBlockPos())), S2CMessageScreenUpdate.click(this, side, ClickControl.ControlType.CLICK, vec)); WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(level, getBlockPos())), S2CMessageScreenUpdate.click(this, side, ClickControl.ControlType.CLICK, vec));
} }
void clickUnsafe(BlockSide side, ClickControl.ControlType action, int x, int y) {
if (level.isClientSide) {
Vector2i vec = (action == ClickControl.ControlType.UP) ? null : new Vector2i(x, y);
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(level, getBlockPos())), S2CMessageScreenUpdate.click(this, side, action, vec));
}
}
public void handleMouseEvent(BlockSide side, ClickControl.ControlType event, @Nullable Vector2i vec, int button) { public void handleMouseEvent(BlockSide side, ClickControl.ControlType event, @Nullable Vector2i vec, int button) {
if (button > 1) return; // buttons above 1 crash the game if (button > 1) return; // buttons above 1 crash the game
@ -791,9 +799,10 @@ public class TileEntityScreen extends BlockEntity {
public void updateClientSideURL(CefBrowser target, String url) { public void updateClientSideURL(CefBrowser target, String url) {
for (Screen scr : screens) { for (Screen scr : screens) {
if (scr.browser == target) { if (scr.browser == target) {
// TODO: what? lol
String webUrl; String webUrl;
try { try {
webUrl = TileEntityScreen.url(url); webUrl = ScreenBlockEntity.url(url);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -1255,5 +1264,4 @@ public class TileEntityScreen extends BlockEntity {
// //
// return oldState.getValue(BlockScreen.hasTE) != newState.getValue(BlockScreen.hasTE); // return oldState.getValue(BlockScreen.hasTE) != newState.getValue(BlockScreen.hasTE);
// } // }
} }

View File

@ -12,16 +12,15 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.data.ServerData; import net.montoyo.wd.data.ServerData;
import net.montoyo.wd.init.TileInit; import net.montoyo.wd.registry.TileRegistry;
import net.montoyo.wd.utilities.NameUUIDPair; import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
public class TileEntityServer extends BlockEntity {
public class ServerBlockEntity extends BlockEntity {
private NameUUIDPair owner; private NameUUIDPair owner;
public TileEntityServer(BlockPos arg2, BlockState arg3) { public ServerBlockEntity(BlockPos arg2, BlockState arg3) {
super(TileInit.SERVER.get(), arg2, arg3); super(TileRegistry.SERVER.get(), arg2, arg3);
} }
@Override @Override
@ -42,13 +41,12 @@ public class TileEntityServer extends BlockEntity {
} }
public void onPlayerRightClick(Player ply) { public void onPlayerRightClick(Player ply) {
if(level.isClientSide) if (level.isClientSide)
return; return;
if( WebDisplays.INSTANCE.miniservPort == 0) if (WebDisplays.INSTANCE.miniservPort == 0)
Util.toast(ply, "noMiniserv"); Util.toast(ply, "noMiniserv");
else if(owner != null && ply instanceof ServerPlayer) else if (owner != null && ply instanceof ServerPlayer)
(new ServerData(getBlockPos(), owner)).sendTo((ServerPlayer) ply); (new ServerData(getBlockPos(), owner)).sendTo((ServerPlayer) ply);
} }
} }

View File

@ -1,32 +0,0 @@
package net.montoyo.wd.init;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import net.montoyo.wd.block.BlockKeyboardLeft;
import net.montoyo.wd.block.BlockKeyboardRight;
import net.montoyo.wd.block.BlockPeripheral;
import net.montoyo.wd.block.BlockScreen;
import net.montoyo.wd.core.DefaultPeripheral;
public class BlockInit {
public static void init(IEventBus bus) {
BLOCKS.register(bus);
}
public static DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, "webdisplays");
public static final RegistryObject<BlockScreen> blockScreen = BLOCKS.register("screen", () -> new BlockScreen(BlockBehaviour.Properties.copy(Blocks.STONE)));
public static final RegistryObject<BlockKeyboardLeft> blockKeyBoard = BlockInit.BLOCKS.register("kb_left", BlockKeyboardLeft::new);
public static final RegistryObject<BlockKeyboardRight> blockKbRight = BLOCKS.register("kb_right", BlockKeyboardRight::new);
public static final RegistryObject<BlockPeripheral> blockRedControl = BlockInit.BLOCKS.register("redctrl", () -> new BlockPeripheral(DefaultPeripheral.REDSTONE_CONTROLLER));
public static final RegistryObject<BlockPeripheral> blockRControl = BlockInit.BLOCKS.register("rctrl", () -> new BlockPeripheral(DefaultPeripheral.REMOTE_CONTROLLER));
public static final RegistryObject<BlockPeripheral> blockServer = BlockInit.BLOCKS.register("server", () -> new BlockPeripheral(DefaultPeripheral.SERVER));
}

View File

@ -1,39 +0,0 @@
package net.montoyo.wd.init;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import net.montoyo.wd.core.DefaultPeripheral;
import net.montoyo.wd.entity.*;
import java.util.Locale;
public class TileInit {
public static final DeferredRegister<BlockEntityType<?>> TILE_TYPES = DeferredRegister
.create(ForgeRegistries.BLOCK_ENTITY_TYPES, "webdisplays");
//Register tile entities
public static final RegistryObject<BlockEntityType<TileEntityScreen>> SCREEN_BLOCK_ENTITY = TILE_TYPES
.register("screen", () -> BlockEntityType.Builder
.of(TileEntityScreen::new, BlockInit.blockScreen.get()).build(null));
public static final RegistryObject<BlockEntityType<?>> KEYBOARD = TILE_TYPES.register("kb_left", () -> BlockEntityType.Builder
.of(TileEntityKeyboard::new, BlockInit.blockKeyBoard.get()).build(null));
public static final RegistryObject<BlockEntityType<?>> REMOTE_CONTROLLER = TILE_TYPES.register("rctrl",
() -> BlockEntityType.Builder.of(TileEntityRCtrl::new, BlockInit.blockRControl.get()).build(null)); //WITHOUT FACING (>= 3)
public static final RegistryObject<BlockEntityType<?>> REDSTONE_CONTROLLER = TILE_TYPES.register("redctrl",
() -> BlockEntityType.Builder.of(TileEntityRedCtrl::new, BlockInit.blockRedControl.get()).build(null));
public static final RegistryObject<BlockEntityType<?>> SERVER = TILE_TYPES.register("server" ,
() -> BlockEntityType.Builder.of(TileEntityServer::new, BlockInit.blockServer.get()).build(null));
public static void init(IEventBus bus) {
TILE_TYPES.register(bus);
}
}

View File

@ -10,7 +10,6 @@ import net.montoyo.wd.core.CraftComponent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class ItemCraftComponent extends ItemMulti implements WDItem { public class ItemCraftComponent extends ItemMulti implements WDItem {
public ItemCraftComponent(Properties properties) { public ItemCraftComponent(Properties properties) {
super(CraftComponent.class, properties super(CraftComponent.class, properties
// .tab(WebDisplays.CREATIVE_TAB) // .tab(WebDisplays.CREATIVE_TAB)

View File

@ -11,20 +11,19 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.HitResult;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.block.ScreenBlock;
import net.montoyo.wd.block.BlockScreen;
import net.montoyo.wd.client.ClientProxy; import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.config.ClientConfig; import net.montoyo.wd.config.ClientConfig;
import net.montoyo.wd.controls.builtin.ClickControl; import net.montoyo.wd.controls.builtin.ClickControl;
import net.montoyo.wd.core.DefaultUpgrade; import net.montoyo.wd.core.DefaultUpgrade;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.init.BlockInit; import net.montoyo.wd.registry.BlockRegistry;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl; import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Multiblock; import net.montoyo.wd.utilities.Multiblock;
import net.montoyo.wd.utilities.Vector2i; import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -39,7 +38,7 @@ public class ItemLaserPointer extends Item implements WDItem {
} }
//Laser pointer //Laser pointer
private static TileEntityScreen pointedScreen; private static ScreenBlockEntity pointedScreen;
private static BlockSide pointedScreenSide; private static BlockSide pointedScreenSide;
private static long lastPointPacket; private static long lastPointPacket;
@ -53,16 +52,16 @@ public class ItemLaserPointer extends Item implements WDItem {
BlockPos bpos = result.getBlockPos(); BlockPos bpos = result.getBlockPos();
if (result.getType() == HitResult.Type.BLOCK && mc.level.getBlockState(bpos).getBlock() == BlockInit.blockScreen.get()) { if (result.getType() == HitResult.Type.BLOCK && mc.level.getBlockState(bpos).getBlock() == BlockRegistry.SCREEN_BLOCk.get()) {
Vector3i pos = new Vector3i(result.getBlockPos()); Vector3i pos = new Vector3i(result.getBlockPos());
BlockSide side = BlockSide.values()[result.getDirection().ordinal()]; BlockSide side = BlockSide.values()[result.getDirection().ordinal()];
Multiblock.findOrigin(mc.level, pos, side, null); Multiblock.findOrigin(mc.level, pos, side, null);
TileEntityScreen te = (TileEntityScreen) mc.level.getBlockEntity(pos.toBlock()); ScreenBlockEntity te = (ScreenBlockEntity) mc.level.getBlockEntity(pos.toBlock());
if (te != null && te.hasUpgrade(side, DefaultUpgrade.LASERMOUSE)) { //hasUpgrade returns false is there's no screen on side 'side' if (te != null && te.hasUpgrade(side, DefaultUpgrade.LASERMOUSE)) { //hasUpgrade returns false is there's no screen on side 'side'
//Since rights aren't synchronized, let the server check them for us... //Since rights aren't synchronized, let the server check them for us...
TileEntityScreen.Screen scr = te.getScreen(side); ScreenBlockEntity.Screen scr = te.getScreen(side);
if (scr.browser != null) { if (scr.browser != null) {
float hitX = ((float) result.getLocation().x) - (float) pos.x; float hitX = ((float) result.getLocation().x) - (float) pos.x;
@ -70,7 +69,7 @@ public class ItemLaserPointer extends Item implements WDItem {
float hitZ = ((float) result.getLocation().z) - (float) pos.z; float hitZ = ((float) result.getLocation().z) - (float) pos.z;
Vector2i tmp = new Vector2i(); Vector2i tmp = new Vector2i();
if (BlockScreen.hit2pixels(side, bpos, new Vector3i(result.getBlockPos()), scr, hitX, hitY, hitZ, tmp)) { if (ScreenBlock.hit2pixels(side, bpos, new Vector3i(result.getBlockPos()), scr, hitX, hitY, hitZ, tmp)) {
laserClick(te, side, scr, tmp); laserClick(te, side, scr, tmp);
} }
} }
@ -82,7 +81,7 @@ public class ItemLaserPointer extends Item implements WDItem {
deselectScreen(); deselectScreen();
} }
private static void laserClick(TileEntityScreen tes, BlockSide side, TileEntityScreen.Screen scr, Vector2i hit) { private static void laserClick(ScreenBlockEntity tes, BlockSide side, ScreenBlockEntity.Screen scr, Vector2i hit) {
tes.handleMouseEvent(side, ClickControl.ControlType.MOVE, hit, -1); tes.handleMouseEvent(side, ClickControl.ControlType.MOVE, hit, -1);
if (pointedScreen == tes && pointedScreenSide == side) { if (pointedScreen == tes && pointedScreenSide == side) {
long t = System.currentTimeMillis(); long t = System.currentTimeMillis();
@ -126,17 +125,17 @@ public class ItemLaserPointer extends Item implements WDItem {
Vector2i tmp = new Vector2i(); Vector2i tmp = new Vector2i();
BlockEntity be = mc.level.getBlockEntity(pos.toBlock()); BlockEntity be = mc.level.getBlockEntity(pos.toBlock());
if (!(be instanceof TileEntityScreen)) return; if (!(be instanceof ScreenBlockEntity)) return;
//noinspection PatternVariableCanBeUsed //noinspection PatternVariableCanBeUsed
TileEntityScreen te = (TileEntityScreen) be; ScreenBlockEntity te = (ScreenBlockEntity) be;
if (te.hasUpgrade(side, DefaultUpgrade.LASERMOUSE)) { //hasUpgrade returns false is there's no screen on side 'side' if (te.hasUpgrade(side, DefaultUpgrade.LASERMOUSE)) { //hasUpgrade returns false is there's no screen on side 'side'
//Since rights aren't synchronized, let the server check them for us... //Since rights aren't synchronized, let the server check them for us...
TileEntityScreen.Screen scr = te.getScreen(side); ScreenBlockEntity.Screen scr = te.getScreen(side);
if (scr.browser != null) { if (scr.browser != null) {
if (BlockScreen.hit2pixels(side, result.getBlockPos(), new Vector3i(result.getBlockPos()), scr, hitX, hitY, hitZ, tmp)) { if (ScreenBlock.hit2pixels(side, result.getBlockPos(), new Vector3i(result.getBlockPos()), scr, hitX, hitY, hitZ, tmp)) {
te.handleMouseEvent(side, ClickControl.ControlType.MOVE, tmp, -1); te.handleMouseEvent(side, ClickControl.ControlType.MOVE, tmp, -1);
te.handleMouseEvent(side, press ? ClickControl.ControlType.DOWN : ClickControl.ControlType.UP, tmp, button); te.handleMouseEvent(side, press ? ClickControl.ControlType.DOWN : ClickControl.ControlType.UP, tmp, button);

View File

@ -14,46 +14,45 @@ import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.block.BlockScreen; import net.montoyo.wd.block.ScreenBlock;
import net.montoyo.wd.core.IPeripheral; import net.montoyo.wd.core.IPeripheral;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Multiblock; import net.montoyo.wd.utilities.Multiblock;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class ItemLinker extends Item implements WDItem { public class ItemLinker extends Item implements WDItem {
public ItemLinker(Properties properties) { public ItemLinker(Properties properties) {
super(properties super(properties
.stacksTo(1) .stacksTo(1)
// .tab(WebDisplays.CREATIVE_TAB) // .tab(WebDisplays.CREATIVE_TAB)
); );
} }
@Override @Override
public InteractionResult useOn(UseOnContext context) { public InteractionResult useOn(UseOnContext context) {
if(context.getLevel().isClientSide()) if (context.getLevel().isClientSide())
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
ItemStack stack = context.getPlayer().getItemInHand(context.getHand()); ItemStack stack = context.getPlayer().getItemInHand(context.getHand());
CompoundTag tag = stack.getTag(); CompoundTag tag = stack.getTag();
if(tag != null) { if (tag != null) {
if(tag.contains("ScreenX") && tag.contains("ScreenY") && tag.contains("ScreenZ") && tag.contains("ScreenSide")) { if (tag.contains("ScreenX") && tag.contains("ScreenY") && tag.contains("ScreenZ") && tag.contains("ScreenSide")) {
BlockState state = context.getLevel().getBlockState(context.getClickedPos()); BlockState state = context.getLevel().getBlockState(context.getClickedPos());
IPeripheral target; IPeripheral target;
if(state.getBlock() instanceof IPeripheral) if (state.getBlock() instanceof IPeripheral)
target = (IPeripheral) state.getBlock(); target = (IPeripheral) state.getBlock();
else { else {
BlockEntity te = context.getLevel().getBlockEntity(context.getClickedPos()); BlockEntity te = context.getLevel().getBlockEntity(context.getClickedPos());
if(te == null || !(te instanceof IPeripheral)) { if (te == null || !(te instanceof IPeripheral)) {
if(context.getPlayer().isShiftKeyDown()) { if (context.getPlayer().isShiftKeyDown()) {
Util.toast(context.getPlayer(), ChatFormatting.GOLD, "linkAbort"); Util.toast(context.getPlayer(), ChatFormatting.GOLD, "linkAbort");
stack.setTag(null); stack.setTag(null);
} else } else
@ -68,10 +67,10 @@ public class ItemLinker extends Item implements WDItem {
Vector3i tePos = new Vector3i(tag.getInt("ScreenX"), tag.getInt("ScreenY"), tag.getInt("ScreenZ")); Vector3i tePos = new Vector3i(tag.getInt("ScreenX"), tag.getInt("ScreenY"), tag.getInt("ScreenZ"));
BlockSide scrSide = BlockSide.values()[tag.getByte("ScreenSide")]; BlockSide scrSide = BlockSide.values()[tag.getByte("ScreenSide")];
if(target.connect(context.getLevel(), context.getClickedPos(), state, tePos, scrSide)) { if (target.connect(context.getLevel(), context.getClickedPos(), state, tePos, scrSide)) {
Util.toast(context.getPlayer(), ChatFormatting.AQUA, "linked"); Util.toast(context.getPlayer(), ChatFormatting.AQUA, "linked");
if(context.getPlayer() instanceof ServerPlayer) if (context.getPlayer() instanceof ServerPlayer)
WebDisplays.INSTANCE.criterionLinkPeripheral.trigger(((ServerPlayer) context.getPlayer()).getAdvancements()); WebDisplays.INSTANCE.criterionLinkPeripheral.trigger(((ServerPlayer) context.getPlayer()).getAdvancements());
} else } else
Util.toast(context.getPlayer(), "linkError"); Util.toast(context.getPlayer(), "linkError");
@ -81,7 +80,7 @@ public class ItemLinker extends Item implements WDItem {
} }
} }
if(!(context.getLevel().getBlockState(context.getClickedPos()).getBlock() instanceof BlockScreen)) { if (!(context.getLevel().getBlockState(context.getClickedPos()).getBlock() instanceof ScreenBlock)) {
Util.toast(context.getPlayer(), "notAScreen"); Util.toast(context.getPlayer(), "notAScreen");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
@ -91,15 +90,15 @@ public class ItemLinker extends Item implements WDItem {
Multiblock.findOrigin(context.getLevel(), pos, side, null); Multiblock.findOrigin(context.getLevel(), pos, side, null);
BlockEntity te = context.getLevel().getBlockEntity(pos.toBlock()); BlockEntity te = context.getLevel().getBlockEntity(pos.toBlock());
if(te == null || !(te instanceof TileEntityScreen)) { if (te == null || !(te instanceof ScreenBlockEntity)) {
Util.toast(context.getPlayer(), "turnOn"); Util.toast(context.getPlayer(), "turnOn");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
TileEntityScreen.Screen scr = ((TileEntityScreen) te).getScreen(side); ScreenBlockEntity.Screen scr = ((ScreenBlockEntity) te).getScreen(side);
if(scr == null) if (scr == null)
Util.toast(context.getPlayer(), "turnOn"); Util.toast(context.getPlayer(), "turnOn");
else if((scr.rightsFor(context.getPlayer()) & ScreenRights.MANAGE_UPGRADES) == 0) else if ((scr.rightsFor(context.getPlayer()) & ScreenRights.MANAGE_UPGRADES) == 0)
Util.toast(context.getPlayer(), "restrictions"); Util.toast(context.getPlayer(), "restrictions");
else { else {
tag = new CompoundTag(); tag = new CompoundTag();
@ -120,5 +119,4 @@ public class ItemLinker extends Item implements WDItem {
public String getWikiName(@Nonnull ItemStack is) { public String getWikiName(@Nonnull ItemStack is) {
return is.getItem().getName(is).getString(); return is.getItem().getName(is).getString();
} }
} }

View File

@ -28,90 +28,88 @@ import javax.annotation.Nullable;
import java.util.UUID; import java.util.UUID;
public class ItemMinePad2 extends Item implements WDItem { public class ItemMinePad2 extends Item implements WDItem {
public ItemMinePad2(Properties properties) {
public ItemMinePad2(Properties properties) { super(properties
super(properties .stacksTo(1)
.stacksTo(1) .defaultDurability(0)
.defaultDurability(0)
// .tab(WebDisplays.CREATIVE_TAB) // .tab(WebDisplays.CREATIVE_TAB)
); );
} }
private static String getURL(ItemStack is) { private static String getURL(ItemStack is) {
if (is.getTag() == null || !is.getTag().contains("PadURL")) if (is.getTag() == null || !is.getTag().contains("PadURL"))
return CommonConfig.Browser.homepage; return CommonConfig.Browser.homepage;
else else
return is.getTag().getString("PadURL"); return is.getTag().getString("PadURL");
} }
@Override @Override
@Nonnull @Nonnull
public InteractionResultHolder<ItemStack> use(Level world, Player ply, @Nonnull InteractionHand hand) { public InteractionResultHolder<ItemStack> use(Level world, Player ply, @Nonnull InteractionHand hand) {
ItemStack is = ply.getItemInHand(hand); ItemStack is = ply.getItemInHand(hand);
boolean ok; boolean ok;
if (ply.isShiftKeyDown()) { if (ply.isShiftKeyDown()) {
if (world.isClientSide) if (world.isClientSide)
WebDisplays.PROXY.displaySetPadURLGui(is, getURL(is)); WebDisplays.PROXY.displaySetPadURLGui(is, getURL(is));
ok = true; ok = true;
} else if (is.getTag() != null && is.getTag().contains("PadID")) { } else if (is.getTag() != null && is.getTag().contains("PadID")) {
if (world.isClientSide) if (world.isClientSide)
WebDisplays.PROXY.openMinePadGui(is.getTag().getUUID("PadID")); WebDisplays.PROXY.openMinePadGui(is.getTag().getUUID("PadID"));
ok = true; ok = true;
} else { } else {
UUID uuid = UUID.randomUUID(); UUID uuid = UUID.randomUUID();
String url = getURL(is); String url = getURL(is);
WDNetworkRegistry.INSTANCE.sendToServer(new C2SMessageMinepadUrl(uuid, url)); WDNetworkRegistry.INSTANCE.sendToServer(new C2SMessageMinepadUrl(uuid, url));
is.getOrCreateTag().putUUID("PadID", uuid); is.getOrCreateTag().putUUID("PadID", uuid);
ok = true; ok = true;
} }
return new InteractionResultHolder<>(ok ? InteractionResult.SUCCESS : InteractionResult.PASS, is); return new InteractionResultHolder<>(ok ? InteractionResult.SUCCESS : InteractionResult.PASS, is);
} }
@Override @Override
public boolean onEntityItemUpdate(ItemStack stack, ItemEntity ent) { public boolean onEntityItemUpdate(ItemStack stack, ItemEntity ent) {
if (ent.onGround() && !ent.level().isClientSide) { if (ent.onGround() && !ent.level().isClientSide) {
CompoundTag tag = ent.getItem().getTag(); CompoundTag tag = ent.getItem().getTag();
if (tag != null && tag.contains("ThrowHeight")) { if (tag != null && tag.contains("ThrowHeight")) {
//Delete it, it touched the ground //Delete it, it touched the ground
double height = tag.getDouble("ThrowHeight"); double height = tag.getDouble("ThrowHeight");
UUID thrower = null; UUID thrower = null;
if (tag.contains("ThrowerMSB") && tag.contains("ThrowerLSB")) if (tag.contains("ThrowerMSB") && tag.contains("ThrowerLSB"))
thrower = new UUID(tag.getLong("ThrowerMSB"), tag.getLong("ThrowerLSB")); thrower = new UUID(tag.getLong("ThrowerMSB"), tag.getLong("ThrowerLSB"));
if (tag.contains("PadID") || tag.contains("PadURL")) { if (tag.contains("PadID") || tag.contains("PadURL")) {
tag.remove("ThrowerMSB"); tag.remove("ThrowerMSB");
tag.remove("ThrowerLSB"); tag.remove("ThrowerLSB");
tag.remove("ThrowHeight"); tag.remove("ThrowHeight");
} else //We can delete the whole tag } else //We can delete the whole tag
ent.getItem().setTag(null); ent.getItem().setTag(null);
if (thrower != null && height - ent.getBlockY() >= 20.0) { if (thrower != null && height - ent.getBlockY() >= 20.0) {
ent.level().playSound(null, ent.getBlockX(), ent.getBlockY(), ent.getBlockZ(), SoundEvents.GLASS_BREAK, SoundSource.BLOCKS, 4.0f, 1.0f); ent.level().playSound(null, ent.getBlockX(), ent.getBlockY(), ent.getBlockZ(), SoundEvents.GLASS_BREAK, SoundSource.BLOCKS, 4.0f, 1.0f);
ent.level().addFreshEntity(new ItemEntity(ent.level(), ent.getBlockX(), ent.getBlockY(), ent.getBlockZ(), CraftComponent.EXTCARD.makeItemStack())); ent.level().addFreshEntity(new ItemEntity(ent.level(), ent.getBlockX(), ent.getBlockY(), ent.getBlockZ(), CraftComponent.EXTCARD.makeItemStack()));
ent.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION); ent.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION);
Player ply = ent.level().getPlayerByUUID(thrower); Player ply = ent.level().getPlayerByUUID(thrower);
if (ply != null && ply instanceof ServerPlayer) if (ply != null && ply instanceof ServerPlayer)
WebDisplays.INSTANCE.criterionPadBreak.trigger(((ServerPlayer) ply).getAdvancements()); WebDisplays.INSTANCE.criterionPadBreak.trigger(((ServerPlayer) ply).getAdvancements());
} }
} }
} }
return false; return false;
} }
@Nullable
@Override
public String getWikiName(@Nonnull ItemStack is) {
return is.getItem().getName(is).getString();
}
@Nullable
@Override
public String getWikiName(@Nonnull ItemStack is) {
return is.getItem().getName(is).getString();
}
} }

View File

@ -9,7 +9,6 @@ import net.minecraft.world.item.Item;
import java.util.BitSet; import java.util.BitSet;
public class ItemMulti extends Item { public class ItemMulti extends Item {
protected final Enum[] values; protected final Enum[] values;
protected final BitSet creativeTabItems; protected final BitSet creativeTabItems;

View File

@ -12,56 +12,57 @@ import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.block.ScreenBlock;
import net.montoyo.wd.block.BlockScreen;
import net.montoyo.wd.config.CommonConfig; import net.montoyo.wd.config.CommonConfig;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.serialization.Util;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class ItemOwnershipThief extends Item implements WDItem { public class ItemOwnershipThief extends Item implements WDItem {
public ItemOwnershipThief(Properties properties) { public ItemOwnershipThief(Properties properties) {
super(properties super(properties
.stacksTo(1) .stacksTo(1)
// .tab(WebDisplays.CREATIVE_TAB) // .tab(WebDisplays.CREATIVE_TAB)
); );
} }
@Override @Override
public @NotNull InteractionResult useOn(UseOnContext context) { public @NotNull InteractionResult useOn(UseOnContext context) {
if(context.getPlayer().isShiftKeyDown()) if (context.getPlayer().isShiftKeyDown())
return InteractionResult.PASS; return InteractionResult.PASS;
if(context.getLevel().isClientSide) if (context.getLevel().isClientSide)
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
if(CommonConfig.disableOwnershipThief) { if (CommonConfig.disableOwnershipThief) {
Util.toast(context.getPlayer(), "otDisabled"); Util.toast(context.getPlayer(), "otDisabled");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
ItemStack stack = context.getPlayer().getItemInHand(context.getHand()); ItemStack stack = context.getPlayer().getItemInHand(context.getHand());
if(stack.hasTag()) { if (stack.hasTag()) {
CompoundTag tag = stack.getTag(); CompoundTag tag = stack.getTag();
if(tag.contains("PosX") && tag.contains("PosY") && tag.contains("PosZ") && tag.contains("Side")) { if (tag.contains("PosX") && tag.contains("PosY") && tag.contains("PosZ") && tag.contains("Side")) {
BlockPos bp = new BlockPos(tag.getInt("PosX"), tag.getInt("PosY"), tag.getInt("PosZ")); BlockPos bp = new BlockPos(tag.getInt("PosX"), tag.getInt("PosY"), tag.getInt("PosZ"));
BlockSide side = BlockSide.values()[tag.getByte("Side")]; BlockSide side = BlockSide.values()[tag.getByte("Side")];
if(!(context.getLevel().getBlockState(bp).getBlock() instanceof BlockScreen)) if (!(context.getLevel().getBlockState(bp).getBlock() instanceof ScreenBlock))
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
BlockEntity te = context.getLevel().getBlockEntity(bp); BlockEntity te = context.getLevel().getBlockEntity(bp);
if(te == null || !(te instanceof TileEntityScreen)) if (te == null || !(te instanceof ScreenBlockEntity))
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
TileEntityScreen tes = (TileEntityScreen) te; ScreenBlockEntity tes = (ScreenBlockEntity) te;
TileEntityScreen.Screen scr = tes.getScreen(side); ScreenBlockEntity.Screen scr = tes.getScreen(side);
if(scr == null) if (scr == null)
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
Log.warning("Owner of screen at %d %d %d, side %s was changed from %s (UUID %s) to %s (UUID %s)", bp.getX(), bp.getY(), bp.getZ(), side.toString(), scr.owner.name, scr.owner.uuid.toString(), context.getPlayer().getName(), context.getPlayer().getGameProfile().getId().toString()); Log.warning("Owner of screen at %d %d %d, side %s was changed from %s (UUID %s) to %s (UUID %s)", bp.getX(), bp.getY(), bp.getZ(), side.toString(), scr.owner.name, scr.owner.uuid.toString(), context.getPlayer().getName(), context.getPlayer().getGameProfile().getId().toString());
@ -72,7 +73,7 @@ public class ItemOwnershipThief extends Item implements WDItem {
} }
} }
if(!(context.getLevel().getBlockState(context.getClickedPos()).getBlock() instanceof BlockScreen)) if (!(context.getLevel().getBlockState(context.getClickedPos()).getBlock() instanceof ScreenBlock))
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
Vector3i pos = new Vector3i(context.getClickedPos()); Vector3i pos = new Vector3i(context.getClickedPos());
@ -80,12 +81,12 @@ public class ItemOwnershipThief extends Item implements WDItem {
Multiblock.findOrigin(context.getLevel(), pos, side, null); Multiblock.findOrigin(context.getLevel(), pos, side, null);
BlockEntity te = context.getLevel().getBlockEntity(pos.toBlock()); BlockEntity te = context.getLevel().getBlockEntity(pos.toBlock());
if(te == null || !(te instanceof TileEntityScreen)) { if (te == null || !(te instanceof ScreenBlockEntity)) {
Util.toast(context.getPlayer(), "turnOn"); Util.toast(context.getPlayer(), "turnOn");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
if(((TileEntityScreen) te).getScreen(side) == null) if (((ScreenBlockEntity) te).getScreen(side) == null)
Util.toast(context.getPlayer(), "turnOn"); Util.toast(context.getPlayer(), "turnOn");
else { else {
CompoundTag tag = new CompoundTag(); CompoundTag tag = new CompoundTag();
@ -107,5 +108,4 @@ public class ItemOwnershipThief extends Item implements WDItem {
public String getWikiName(@Nonnull ItemStack is) { public String getWikiName(@Nonnull ItemStack is) {
return "Ownership_Thief"; return "Ownership_Thief";
} }
} }

View File

@ -10,31 +10,29 @@ import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.block.ScreenBlock;
import net.montoyo.wd.block.BlockScreen;
import net.montoyo.wd.data.ScreenConfigData; import net.montoyo.wd.data.ScreenConfigData;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.Multiblock; import net.montoyo.wd.utilities.Multiblock;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class ItemScreenConfigurator extends Item implements WDItem { public class ItemScreenConfigurator extends Item implements WDItem {
public ItemScreenConfigurator(Properties properties) { public ItemScreenConfigurator(Properties properties) {
super(properties super(properties
.stacksTo(1) .stacksTo(1)
// .tab(WebDisplays.CREATIVE_TAB) // .tab(WebDisplays.CREATIVE_TAB)
); );
} }
@Override @Override
public InteractionResult useOn(UseOnContext context) { public InteractionResult useOn(UseOnContext context) {
if(context.getPlayer().isShiftKeyDown() || !(context.getLevel().getBlockState(context.getClickedPos()).getBlock() instanceof BlockScreen)) if (context.getPlayer().isShiftKeyDown() || !(context.getLevel().getBlockState(context.getClickedPos()).getBlock() instanceof ScreenBlock))
return InteractionResult.PASS; return InteractionResult.PASS;
if(context.getLevel().isClientSide) if (context.getLevel().isClientSide)
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
Vector3i origin = new Vector3i(context.getClickedPos()); Vector3i origin = new Vector3i(context.getClickedPos());
@ -43,13 +41,13 @@ public class ItemScreenConfigurator extends Item implements WDItem {
Multiblock.findOrigin(context.getLevel(), origin, side, null); Multiblock.findOrigin(context.getLevel(), origin, side, null);
BlockEntity te = context.getLevel().getBlockEntity(origin.toBlock()); BlockEntity te = context.getLevel().getBlockEntity(origin.toBlock());
if(te == null || !(te instanceof TileEntityScreen)) { if (te == null || !(te instanceof ScreenBlockEntity)) {
Util.toast(context.getPlayer(), "turnOn"); Util.toast(context.getPlayer(), "turnOn");
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
TileEntityScreen.Screen scr = ((TileEntityScreen) te).getScreen(side); ScreenBlockEntity.Screen scr = ((ScreenBlockEntity) te).getScreen(side);
if(scr == null) if (scr == null)
Util.toast(context.getPlayer(), "turnOn"); Util.toast(context.getPlayer(), "turnOn");
else else
(new ScreenConfigData(origin, side, scr)).sendTo((ServerPlayer) context.getPlayer()); (new ScreenConfigData(origin, side, scr)).sendTo((ServerPlayer) context.getPlayer());

View File

@ -7,11 +7,10 @@ package net.montoyo.wd.item;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.core.DefaultUpgrade; import net.montoyo.wd.core.DefaultUpgrade;
import net.montoyo.wd.core.IUpgrade; import net.montoyo.wd.core.IUpgrade;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@ -26,12 +25,12 @@ public class ItemUpgrade extends ItemMulti implements IUpgrade, WDItem {
} }
@Override @Override
public void onInstall(@Nonnull TileEntityScreen tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is) { public void onInstall(@Nonnull ScreenBlockEntity tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is) {
} }
@Override @Override
public boolean onRemove(@Nonnull TileEntityScreen tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is) { public boolean onRemove(@Nonnull ScreenBlockEntity tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is) {
if(DefaultUpgrade.LASERMOUSE.matchesLaserMouse(is)) if (DefaultUpgrade.LASERMOUSE.matchesLaserMouse(is))
tes.clearLaserUser(screenSide); tes.clearLaserUser(screenSide);
return false; return false;

View File

@ -14,10 +14,9 @@ import javax.annotation.Nullable;
import java.util.List; import java.util.List;
public interface WDItem { public interface WDItem {
static void addInformation(@Nullable List<String> tt) { static void addInformation(@Nullable List<String> tt) {
if(tt != null && WebDisplays.PROXY.isShiftDown()) if (tt != null && WebDisplays.PROXY.isShiftDown())
tt.add("" + ChatFormatting.GRAY + I18n.get("item.webdisplays.wiki")); tt.add(ChatFormatting.GRAY + I18n.get("item.webdisplays.wiki"));
} }
String getWikiName(@Nonnull ItemStack is); String getWikiName(@Nonnull ItemStack is);

View File

@ -9,7 +9,7 @@ import net.minecraft.world.entity.player.Player;
import net.montoyo.wd.miniserv.*; import net.montoyo.wd.miniserv.*;
import net.montoyo.wd.net.server_bound.C2SMessageMiniservConnect; import net.montoyo.wd.net.server_bound.C2SMessageMiniservConnect;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import javax.crypto.*; import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;

View File

@ -8,7 +8,7 @@ import net.montoyo.wd.miniserv.Constants;
import net.montoyo.wd.miniserv.OutgoingPacket; import net.montoyo.wd.miniserv.OutgoingPacket;
import net.montoyo.wd.miniserv.PacketID; import net.montoyo.wd.miniserv.PacketID;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;

View File

@ -6,7 +6,7 @@ package net.montoyo.wd.miniserv.server;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;

View File

@ -6,7 +6,7 @@ package net.montoyo.wd.miniserv.server;
import net.montoyo.wd.miniserv.*; import net.montoyo.wd.miniserv.*;
import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import java.io.*; import java.io.*;
import java.nio.channels.ClosedChannelException; import java.nio.channels.ClosedChannelException;

View File

@ -4,7 +4,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.MouseHandler; import net.minecraft.client.MouseHandler;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.HitResult;
import net.montoyo.wd.init.ItemInit; import net.montoyo.wd.registry.ItemRegistry;
import net.montoyo.wd.item.ItemLaserPointer; import net.montoyo.wd.item.ItemLaserPointer;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@ -15,21 +15,23 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(MouseHandler.class) @Mixin(MouseHandler.class)
public class MouseHandlerMixin { public class MouseHandlerMixin {
@Shadow @Final private Minecraft minecraft; @Shadow
@Final
private Minecraft minecraft;
@Inject(at = @At("HEAD"), method = "onPress", cancellable = true) @Inject(at = @At("HEAD"), method = "onPress", cancellable = true)
public void prePress(long p_91531_, int p_91532_, int p_91533_, int p_91534_, CallbackInfo ci) { public void prePress(long p_91531_, int p_91532_, int p_91533_, int p_91534_, CallbackInfo ci) {
boolean flag = p_91533_ == 1; boolean flag = p_91533_ == 1;
if (Minecraft.getInstance().screen == null) { if (Minecraft.getInstance().screen == null) {
if ( if (
minecraft.player != null && minecraft.level != null && minecraft.player != null && minecraft.level != null &&
minecraft.player.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemInit.LASER_POINTER.get()) && minecraft.player.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemRegistry.LASER_POINTER.get()) &&
(minecraft.hitResult == null || minecraft.hitResult.getType() == HitResult.Type.BLOCK || minecraft.hitResult.getType() == HitResult.Type.MISS) (minecraft.hitResult == null || minecraft.hitResult.getType() == HitResult.Type.BLOCK || minecraft.hitResult.getType() == HitResult.Type.MISS)
) { ) {
ItemLaserPointer.press(flag, p_91532_); ItemLaserPointer.press(flag, p_91532_);
ci.cancel(); ci.cancel();
} }
} }
} }
} }

View File

@ -14,19 +14,19 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Gui.class) @Mixin(Gui.class)
public class OverlayMixin { public class OverlayMixin {
@Shadow @Shadow
@Final @Final
protected Minecraft minecraft; protected Minecraft minecraft;
@Shadow @Shadow
protected int screenWidth; protected int screenWidth;
@Shadow @Shadow
protected int screenHeight; protected int screenHeight;
@Inject(at = @At("HEAD"), method = "renderCrosshair", cancellable = true) @Inject(at = @At("HEAD"), method = "renderCrosshair", cancellable = true)
public void preDrawCrosshair(GuiGraphics pGuiGraphics, CallbackInfo ci) { public void preDrawCrosshair(GuiGraphics pGuiGraphics, CallbackInfo ci) {
// ClientProxy.renderCrosshair(minecraft.options, screenWidth, screenHeight, ((Gui) (Object) this).getBlitOffset(), poseStack, ci); // ClientProxy.renderCrosshair(minecraft.options, screenWidth, screenHeight, ((Gui) (Object) this).getBlitOffset(), poseStack, ci);
ClientProxy.renderCrosshair(minecraft.options, screenWidth, screenHeight, 0, pGuiGraphics, ci); ClientProxy.renderCrosshair(minecraft.options, screenWidth, screenHeight, 0, pGuiGraphics, ci);
} }
} }

View File

@ -1,7 +1,7 @@
package net.montoyo.wd.net; package net.montoyo.wd.net;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
import java.util.Arrays; import java.util.Arrays;
import java.util.function.Consumer; import java.util.function.Consumer;

View File

@ -8,7 +8,7 @@ import net.minecraft.network.FriendlyByteBuf;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.net.Packet; import net.montoyo.wd.net.Packet;
import net.montoyo.wd.utilities.NameUUIDPair; import net.montoyo.wd.utilities.serialization.NameUUIDPair;
public class S2CMessageACResult extends Packet { public class S2CMessageACResult extends Packet {
private static NameUUIDPair[] result; private static NameUUIDPair[] result;

View File

@ -10,36 +10,41 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.net.Packet; import net.montoyo.wd.net.Packet;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.*;
import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import static net.montoyo.wd.block.BlockScreen.hasTE; import static net.montoyo.wd.block.ScreenBlock.hasTE;
public class S2CMessageAddScreen extends Packet { public class S2CMessageAddScreen extends Packet {
private boolean clear; private boolean clear;
private Vector3i pos; private Vector3i pos;
private TileEntityScreen.Screen[] screens; private ScreenBlockEntity.Screen[] screens;
public S2CMessageAddScreen(TileEntityScreen tes) { public S2CMessageAddScreen(ScreenBlockEntity tes) {
clear = true; clear = true;
pos = new Vector3i(tes.getBlockPos()); pos = new Vector3i(tes.getBlockPos());
screens = new TileEntityScreen.Screen[tes.screenCount()]; screens = new ScreenBlockEntity.Screen[tes.screenCount()];
for (int i = 0; i < tes.screenCount(); i++) for (int i = 0; i < tes.screenCount(); i++)
screens[i] = tes.getScreen(i); screens[i] = tes.getScreen(i);
} }
public S2CMessageAddScreen(TileEntityScreen tes, TileEntityScreen.Screen... toSend) { public S2CMessageAddScreen(ScreenBlockEntity tes, ScreenBlockEntity.Screen... toSend) {
clear = false; clear = false;
pos = new Vector3i(tes.getBlockPos()); pos = new Vector3i(tes.getBlockPos());
screens = toSend; screens = toSend;
} }
public S2CMessageAddScreen(boolean clear, Vector3i pos, TileEntityScreen.Screen[] screens) { public S2CMessageAddScreen(boolean clear, Vector3i pos, ScreenBlockEntity.Screen[] screens) {
this.clear = clear; this.clear = clear;
this.pos = pos; this.pos = pos;
this.screens = screens; this.screens = screens;
@ -53,9 +58,9 @@ public class S2CMessageAddScreen extends Packet {
int cnt = buf.readByte() & 7; int cnt = buf.readByte() & 7;
screens = new TileEntityScreen.Screen[cnt]; screens = new ScreenBlockEntity.Screen[cnt];
for (int i = 0; i < cnt; i++) { for (int i = 0; i < cnt; i++) {
screens[i] = new TileEntityScreen.Screen(); screens[i] = new ScreenBlockEntity.Screen();
screens[i].side = BlockSide.values()[buf.readByte()]; screens[i].side = BlockSide.values()[buf.readByte()];
screens[i].size = new Vector2i(buf); screens[i].size = new Vector2i(buf);
screens[i].url = buf.readUtf(); screens[i].url = buf.readUtf();
@ -76,7 +81,7 @@ public class S2CMessageAddScreen extends Packet {
pos.writeTo(buf); pos.writeTo(buf);
buf.writeByte(screens.length); buf.writeByte(screens.length);
for (TileEntityScreen.Screen scr : screens) { for (ScreenBlockEntity.Screen scr : screens) {
buf.writeByte(scr.side.ordinal()); buf.writeByte(scr.side.ordinal());
scr.size.writeTo(buf); scr.size.writeTo(buf);
buf.writeUtf(scr.url); buf.writeUtf(scr.url);
@ -95,11 +100,11 @@ public class S2CMessageAddScreen extends Packet {
ctx.enqueueWork(() -> { ctx.enqueueWork(() -> {
Level lvl = (Level) WebDisplays.PROXY.getWorld(ctx); Level lvl = (Level) WebDisplays.PROXY.getWorld(ctx);
BlockEntity te = lvl.getBlockEntity(pos.toBlock()); BlockEntity te = lvl.getBlockEntity(pos.toBlock());
if (!(te instanceof TileEntityScreen)) { if (!(te instanceof ScreenBlockEntity)) {
lvl.setBlockAndUpdate(pos.toBlock(), lvl.getBlockState(pos.toBlock()).setValue(hasTE, true)); lvl.setBlockAndUpdate(pos.toBlock(), lvl.getBlockState(pos.toBlock()).setValue(hasTE, true));
te = lvl.getBlockEntity(pos.toBlock()); te = lvl.getBlockEntity(pos.toBlock());
if (!(te instanceof TileEntityScreen)) { if (!(te instanceof ScreenBlockEntity)) {
if (clear) if (clear)
Log.error("CMessageAddScreen: Can't add screen to invalid tile entity at %s", pos.toString()); Log.error("CMessageAddScreen: Can't add screen to invalid tile entity at %s", pos.toString());
@ -107,17 +112,17 @@ public class S2CMessageAddScreen extends Packet {
} }
} }
TileEntityScreen tes = (TileEntityScreen) te; ScreenBlockEntity tes = (ScreenBlockEntity) te;
if (clear) if (clear)
tes.clear(); tes.clear();
for (TileEntityScreen.Screen entry : screens) { for (ScreenBlockEntity.Screen entry : screens) {
TileEntityScreen.Screen scr = tes.addScreen(entry.side, entry.size, entry.resolution, null, false); ScreenBlockEntity.Screen scr = tes.addScreen(entry.side, entry.size, entry.resolution, null, false);
scr.rotation = entry.rotation; scr.rotation = entry.rotation;
String webUrl; String webUrl;
try { try {
webUrl = TileEntityScreen.url(entry.url); webUrl = ScreenBlockEntity.url(entry.url);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -9,7 +9,7 @@ import net.minecraft.network.FriendlyByteBuf;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.net.Packet; import net.montoyo.wd.net.Packet;
import net.montoyo.wd.utilities.BlockSide; import net.montoyo.wd.utilities.data.BlockSide;
import java.util.Arrays; import java.util.Arrays;

View File

@ -14,10 +14,14 @@ import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.controls.ScreenControl; import net.montoyo.wd.controls.ScreenControl;
import net.montoyo.wd.controls.ScreenControlRegistry; import net.montoyo.wd.controls.ScreenControlRegistry;
import net.montoyo.wd.controls.builtin.*; import net.montoyo.wd.controls.builtin.*;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.net.BufferUtils; import net.montoyo.wd.net.BufferUtils;
import net.montoyo.wd.net.Packet; import net.montoyo.wd.net.Packet;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
// TODO: use registry based approach // TODO: use registry based approach
public class S2CMessageScreenUpdate extends Packet { public class S2CMessageScreenUpdate extends Packet {
@ -39,49 +43,49 @@ public class S2CMessageScreenUpdate extends Packet {
this.control = ScreenControlRegistry.parse(buf); this.control = ScreenControlRegistry.parse(buf);
} }
public static S2CMessageScreenUpdate setURL(TileEntityScreen screen, BlockSide side, String weburl) { public static S2CMessageScreenUpdate setURL(ScreenBlockEntity screen, BlockSide side, String weburl) {
S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side); S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side);
screenUpdate.control = new SetURLControl(weburl, new Vector3i(screenUpdate.pos)); screenUpdate.control = new SetURLControl(weburl, new Vector3i(screenUpdate.pos));
return screenUpdate; return screenUpdate;
} }
public static S2CMessageScreenUpdate setResolution(TileEntityScreen screen, BlockSide side, Vector2i res) { public static S2CMessageScreenUpdate setResolution(ScreenBlockEntity screen, BlockSide side, Vector2i res) {
S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side); S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side);
screenUpdate.control = new ScreenModifyControl(res); screenUpdate.control = new ScreenModifyControl(res);
return screenUpdate; return screenUpdate;
} }
public static S2CMessageScreenUpdate rotation(TileEntityScreen screen, BlockSide side, Rotation rot) { public static S2CMessageScreenUpdate rotation(ScreenBlockEntity screen, BlockSide side, Rotation rot) {
S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side); S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side);
screenUpdate.control = new ScreenModifyControl(rot); screenUpdate.control = new ScreenModifyControl(rot);
return screenUpdate; return screenUpdate;
} }
public static S2CMessageScreenUpdate upgrade(TileEntityScreen screen, BlockSide side, boolean adding, ItemStack stack) { public static S2CMessageScreenUpdate upgrade(ScreenBlockEntity screen, BlockSide side, boolean adding, ItemStack stack) {
S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side); S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side);
screenUpdate.control = new ManageRightsAndUpdgradesControl(adding, stack); screenUpdate.control = new ManageRightsAndUpdgradesControl(adding, stack);
return screenUpdate; return screenUpdate;
} }
public static S2CMessageScreenUpdate click(TileEntityScreen screen, BlockSide side, ClickControl.ControlType mouseMove, Vector2i pos) { public static S2CMessageScreenUpdate click(ScreenBlockEntity screen, BlockSide side, ClickControl.ControlType mouseMove, Vector2i pos) {
S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side); S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side);
screenUpdate.control = new ClickControl(mouseMove, pos); screenUpdate.control = new ClickControl(mouseMove, pos);
return screenUpdate; return screenUpdate;
} }
public static S2CMessageScreenUpdate type(TileEntityScreen screen, BlockSide side, String text) { public static S2CMessageScreenUpdate type(ScreenBlockEntity screen, BlockSide side, String text) {
S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side); S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side);
screenUpdate.control = new KeyTypedControl(text, screenUpdate.pos); screenUpdate.control = new KeyTypedControl(text, screenUpdate.pos);
return screenUpdate; return screenUpdate;
} }
public static S2CMessageScreenUpdate autoVolume(TileEntityScreen screen, BlockSide side, boolean av) { public static S2CMessageScreenUpdate autoVolume(ScreenBlockEntity screen, BlockSide side, boolean av) {
S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side); S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side);
screenUpdate.control = new AutoVolumeControl(av); screenUpdate.control = new AutoVolumeControl(av);
return screenUpdate; return screenUpdate;
} }
public static S2CMessageScreenUpdate owner(TileEntityScreen screen, BlockSide side, NameUUIDPair owner) { public static S2CMessageScreenUpdate owner(ScreenBlockEntity screen, BlockSide side, NameUUIDPair owner) {
S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side); S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(screen.getBlockPos(), side);
screenUpdate.control = new OwnerControl(owner); screenUpdate.control = new OwnerControl(owner);
return screenUpdate; return screenUpdate;
@ -107,7 +111,7 @@ public class S2CMessageScreenUpdate extends Packet {
ctx.enqueueWork(() -> { ctx.enqueueWork(() -> {
Level level = (Level) WebDisplays.PROXY.getWorld(ctx); Level level = (Level) WebDisplays.PROXY.getWorld(ctx);
BlockEntity be = level.getBlockEntity(pos); BlockEntity be = level.getBlockEntity(pos);
if (be instanceof TileEntityScreen tes) { if (be instanceof ScreenBlockEntity tes) {
control.handleClient(pos, side, tes, ctx); control.handleClient(pos, side, tes, ctx);
} }
}); });

View File

@ -13,7 +13,7 @@ import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.net.Packet; import net.montoyo.wd.net.Packet;
import net.montoyo.wd.net.WDNetworkRegistry; import net.montoyo.wd.net.WDNetworkRegistry;
import net.montoyo.wd.net.client_bound.S2CMessageACResult; import net.montoyo.wd.net.client_bound.S2CMessageACResult;
import net.montoyo.wd.utilities.NameUUIDPair; import net.montoyo.wd.utilities.serialization.NameUUIDPair;
import java.util.Arrays; import java.util.Arrays;

View File

@ -12,11 +12,11 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.ForgeMod;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.core.ScreenRights; import net.montoyo.wd.core.ScreenRights;
import net.montoyo.wd.entity.TileEntityRedCtrl; import net.montoyo.wd.entity.RedstoneControlBlockEntity;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.net.Packet; import net.montoyo.wd.net.Packet;
import net.montoyo.wd.utilities.Util; import net.montoyo.wd.utilities.serialization.Util;
import net.montoyo.wd.utilities.Vector3i; import net.montoyo.wd.utilities.math.Vector3i;
public class C2SMessageRedstoneCtrl extends Packet implements Runnable { public class C2SMessageRedstoneCtrl extends Packet implements Runnable {
private Player player; private Player player;
@ -50,16 +50,16 @@ public class C2SMessageRedstoneCtrl extends Packet implements Runnable {
return; return;
BlockEntity te = world.getBlockEntity(blockPos); BlockEntity te = world.getBlockEntity(blockPos);
if (te == null || !(te instanceof TileEntityRedCtrl)) if (te == null || !(te instanceof RedstoneControlBlockEntity))
return; return;
TileEntityRedCtrl redCtrl = (TileEntityRedCtrl) te; RedstoneControlBlockEntity redCtrl = (RedstoneControlBlockEntity) te;
if (!redCtrl.isScreenChunkLoaded()) { if (!redCtrl.isScreenChunkLoaded()) {
Util.toast(player, "chunkUnloaded"); Util.toast(player, "chunkUnloaded");
return; return;
} }
TileEntityScreen tes = redCtrl.getConnectedScreen(); ScreenBlockEntity tes = redCtrl.getConnectedScreen();
if (tes == null) if (tes == null)
return; return;

View File

@ -17,10 +17,14 @@ import net.montoyo.wd.controls.ScreenControlRegistry;
import net.montoyo.wd.controls.builtin.*; import net.montoyo.wd.controls.builtin.*;
import net.montoyo.wd.core.JSServerRequest; import net.montoyo.wd.core.JSServerRequest;
import net.montoyo.wd.core.MissingPermissionException; import net.montoyo.wd.core.MissingPermissionException;
import net.montoyo.wd.entity.TileEntityScreen; import net.montoyo.wd.entity.ScreenBlockEntity;
import net.montoyo.wd.net.BufferUtils; import net.montoyo.wd.net.BufferUtils;
import net.montoyo.wd.net.Packet; import net.montoyo.wd.net.Packet;
import net.montoyo.wd.utilities.*; import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
import net.montoyo.wd.utilities.data.Rotation;
import net.montoyo.wd.utilities.serialization.NameUUIDPair;
// TODO: this is a mess; a registry based approach would likely be more readable // TODO: this is a mess; a registry based approach would likely be more readable
public class C2SMessageScreenCtrl extends Packet { public class C2SMessageScreenCtrl extends Packet {
@ -40,13 +44,13 @@ public class C2SMessageScreenCtrl extends Packet {
public C2SMessageScreenCtrl() { public C2SMessageScreenCtrl() {
} }
public C2SMessageScreenCtrl(TileEntityScreen screen, BlockSide side, ScreenControl control) { public C2SMessageScreenCtrl(ScreenBlockEntity screen, BlockSide side, ScreenControl control) {
this.pos = screen.getBlockPos(); this.pos = screen.getBlockPos();
this.side = side; this.side = side;
this.control = control; this.control = control;
} }
protected static C2SMessageScreenCtrl base(TileEntityScreen screen, BlockSide side) { protected static C2SMessageScreenCtrl base(ScreenBlockEntity screen, BlockSide side) {
C2SMessageScreenCtrl packet = new C2SMessageScreenCtrl(); C2SMessageScreenCtrl packet = new C2SMessageScreenCtrl();
packet.pos = screen.getBlockPos(); packet.pos = screen.getBlockPos();
packet.side = side; packet.side = side;
@ -54,79 +58,79 @@ public class C2SMessageScreenCtrl extends Packet {
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public static C2SMessageScreenCtrl setURL(TileEntityScreen tes, BlockSide side, String url, Vector3i remoteLocation) { public static C2SMessageScreenCtrl setURL(ScreenBlockEntity tes, BlockSide side, String url, Vector3i remoteLocation) {
C2SMessageScreenCtrl ret = base(tes, side); C2SMessageScreenCtrl ret = base(tes, side);
ret.control = new SetURLControl(url, remoteLocation); ret.control = new SetURLControl(url, remoteLocation);
return ret; return ret;
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public C2SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, NameUUIDPair friend, boolean del) { public C2SMessageScreenCtrl(ScreenBlockEntity tes, BlockSide side, NameUUIDPair friend, boolean del) {
this(tes, side, new ModifyFriendListControl(friend, !del)); this(tes, side, new ModifyFriendListControl(friend, !del));
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public C2SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, int fr, int or) { public C2SMessageScreenCtrl(ScreenBlockEntity tes, BlockSide side, int fr, int or) {
this(tes, side, new ManageRightsAndUpdgradesControl(fr, or)); this(tes, side, new ManageRightsAndUpdgradesControl(fr, or));
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public C2SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, ItemStack toRem) { public C2SMessageScreenCtrl(ScreenBlockEntity tes, BlockSide side, ItemStack toRem) {
this(tes, side, new ManageRightsAndUpdgradesControl(false, toRem)); this(tes, side, new ManageRightsAndUpdgradesControl(false, toRem));
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public C2SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, Rotation rot) { public C2SMessageScreenCtrl(ScreenBlockEntity tes, BlockSide side, Rotation rot) {
this(tes, side, new ScreenModifyControl(rot)); this(tes, side, new ScreenModifyControl(rot));
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public static C2SMessageScreenCtrl vec2(TileEntityScreen tes, BlockSide side, int ctrl, Vector2i vec) { public static C2SMessageScreenCtrl vec2(ScreenBlockEntity tes, BlockSide side, int ctrl, Vector2i vec) {
throw new RuntimeException("Moved: look into ScreenControlRegistry"); throw new RuntimeException("Moved: look into ScreenControlRegistry");
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public static C2SMessageScreenCtrl resolution(TileEntityScreen tes, BlockSide side, Vector2i vec) { public static C2SMessageScreenCtrl resolution(ScreenBlockEntity tes, BlockSide side, Vector2i vec) {
C2SMessageScreenCtrl ret = base(tes, side); C2SMessageScreenCtrl ret = base(tes, side);
ret.control = new ScreenModifyControl(vec); ret.control = new ScreenModifyControl(vec);
return ret; return ret;
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public static C2SMessageScreenCtrl type(TileEntityScreen tes, BlockSide side, String text, BlockPos soundPos) { public static C2SMessageScreenCtrl type(ScreenBlockEntity tes, BlockSide side, String text, BlockPos soundPos) {
C2SMessageScreenCtrl ret = base(tes, side); C2SMessageScreenCtrl ret = base(tes, side);
ret.control = new KeyTypedControl(text, soundPos); ret.control = new KeyTypedControl(text, soundPos);
return ret; return ret;
} }
public static C2SMessageScreenCtrl laserMove(TileEntityScreen tes, BlockSide side, Vector2i vec) { public static C2SMessageScreenCtrl laserMove(ScreenBlockEntity tes, BlockSide side, Vector2i vec) {
C2SMessageScreenCtrl ret = base(tes, side); C2SMessageScreenCtrl ret = base(tes, side);
ret.control = new LaserControl(LaserControl.ControlType.MOVE, vec); ret.control = new LaserControl(LaserControl.ControlType.MOVE, vec);
return ret; return ret;
} }
public static C2SMessageScreenCtrl laserDown(TileEntityScreen tes, BlockSide side, Vector2i vec, int button) { public static C2SMessageScreenCtrl laserDown(ScreenBlockEntity tes, BlockSide side, Vector2i vec, int button) {
C2SMessageScreenCtrl ret = base(tes, side); C2SMessageScreenCtrl ret = base(tes, side);
ret.control = new LaserControl(LaserControl.ControlType.DOWN, vec, button); ret.control = new LaserControl(LaserControl.ControlType.DOWN, vec, button);
return ret; return ret;
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public static C2SMessageScreenCtrl laserUp(TileEntityScreen tes, BlockSide side, int button) { public static C2SMessageScreenCtrl laserUp(ScreenBlockEntity tes, BlockSide side, int button) {
C2SMessageScreenCtrl ret = base(tes, side); C2SMessageScreenCtrl ret = base(tes, side);
ret.control = new LaserControl(LaserControl.ControlType.UP, null, button); ret.control = new LaserControl(LaserControl.ControlType.UP, null, button);
return ret; return ret;
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public static C2SMessageScreenCtrl jsRequest(TileEntityScreen tes, BlockSide side, int reqId, JSServerRequest reqType, Object... data) { public static C2SMessageScreenCtrl jsRequest(ScreenBlockEntity tes, BlockSide side, int reqId, JSServerRequest reqType, Object... data) {
C2SMessageScreenCtrl ret = base(tes, side); C2SMessageScreenCtrl ret = base(tes, side);
ret.control = new JSRequestControl(reqId, reqType, data); ret.control = new JSRequestControl(reqId, reqType, data);
return ret; return ret;
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
public static C2SMessageScreenCtrl autoVol(TileEntityScreen tes, BlockSide side, boolean av) { public static C2SMessageScreenCtrl autoVol(ScreenBlockEntity tes, BlockSide side, boolean av) {
C2SMessageScreenCtrl ret = base(tes, side); C2SMessageScreenCtrl ret = base(tes, side);
ret.control = new AutoVolumeControl(av); ret.control = new AutoVolumeControl(av);
return ret; return ret;
@ -150,7 +154,7 @@ public class C2SMessageScreenCtrl extends Packet {
control.write(buf); control.write(buf);
} }
public void checkPermission(ServerPlayer sender, TileEntityScreen scr, int right) throws MissingPermissionException { public void checkPermission(ServerPlayer sender, ScreenBlockEntity scr, int right) throws MissingPermissionException {
int prights = scr.getScreen(side).rightsFor(sender); int prights = scr.getScreen(side).rightsFor(sender);
if ((prights & right) == 0) if ((prights & right) == 0)
throw new MissingPermissionException(right, sender); throw new MissingPermissionException(right, sender);
@ -162,7 +166,7 @@ public class C2SMessageScreenCtrl extends Packet {
try { try {
Level level = (Level) WebDisplays.PROXY.getWorld(ctx); Level level = (Level) WebDisplays.PROXY.getWorld(ctx);
BlockEntity be = level.getBlockEntity(pos); BlockEntity be = level.getBlockEntity(pos);
if (be instanceof TileEntityScreen tes) { if (be instanceof ScreenBlockEntity tes) {
control.handleServer(pos, side, tes, ctx, (perm) -> { control.handleServer(pos, side, tes, ctx, (perm) -> {
try { try {
checkPermission(ctx.getSender(), tes, perm); checkPermission(ctx.getSender(), tes, perm);

View File

@ -0,0 +1,31 @@
package net.montoyo.wd.registry;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import net.montoyo.wd.block.KeyboardBlockLeft;
import net.montoyo.wd.block.KeyboardBlockRight;
import net.montoyo.wd.block.PeripheralBlock;
import net.montoyo.wd.block.ScreenBlock;
import net.montoyo.wd.core.DefaultPeripheral;
public class BlockRegistry {
public static void init(IEventBus bus) {
BLOCKS.register(bus);
}
public static DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, "webdisplays");
public static final RegistryObject<ScreenBlock> SCREEN_BLOCk = BLOCKS.register("screen", () -> new ScreenBlock(BlockBehaviour.Properties.copy(Blocks.STONE)));
public static final RegistryObject<KeyboardBlockLeft> KEYBOARD_BLOCK = BlockRegistry.BLOCKS.register("kb_left", KeyboardBlockLeft::new);
public static final RegistryObject<KeyboardBlockRight> blockKbRight = BLOCKS.register("kb_right", KeyboardBlockRight::new);
public static final RegistryObject<PeripheralBlock> REDSTONE_CONTROL_BLOCK = BlockRegistry.BLOCKS.register("redctrl", () -> new PeripheralBlock(DefaultPeripheral.REDSTONE_CONTROLLER));
public static final RegistryObject<PeripheralBlock> REMOTE_CONTROLLER_BLOCK = BlockRegistry.BLOCKS.register("rctrl", () -> new PeripheralBlock(DefaultPeripheral.REMOTE_CONTROLLER));
public static final RegistryObject<PeripheralBlock> SERVER_BLOCK = BlockRegistry.BLOCKS.register("server", () -> new PeripheralBlock(DefaultPeripheral.SERVER));
}

View File

@ -1,4 +1,4 @@
package net.montoyo.wd.init; package net.montoyo.wd.registry;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
@ -6,7 +6,6 @@ import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject; import net.minecraftforge.registries.RegistryObject;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.block.item.KeyboardItem; import net.montoyo.wd.block.item.KeyboardItem;
import net.montoyo.wd.core.CraftComponent; import net.montoyo.wd.core.CraftComponent;
import net.montoyo.wd.core.DefaultUpgrade; import net.montoyo.wd.core.DefaultUpgrade;
@ -15,7 +14,7 @@ import net.montoyo.wd.item.*;
import java.util.Locale; import java.util.Locale;
@SuppressWarnings({"unchecked", "unused"}) @SuppressWarnings({"unchecked", "unused"})
public class ItemInit{ public class ItemRegistry {
public static void init(IEventBus bus) { public static void init(IEventBus bus) {
ITEMS.register(bus); ITEMS.register(bus);
} }
@ -31,7 +30,7 @@ public class ItemInit{
public static final RegistryObject<Item> MINEPAD = ITEMS.register("minepad", () -> new ItemMinePad2(new Item.Properties())); public static final RegistryObject<Item> MINEPAD = ITEMS.register("minepad", () -> new ItemMinePad2(new Item.Properties()));
public static final RegistryObject<Item> LASER_POINTER = ITEMS.register("laserpointer", () -> new ItemLaserPointer(new Item.Properties())); public static final RegistryObject<Item> LASER_POINTER = ITEMS.register("laserpointer", () -> new ItemLaserPointer(new Item.Properties()));
static { static {
DefaultUpgrade[] defaultUpgrades = DefaultUpgrade.values(); DefaultUpgrade[] defaultUpgrades = DefaultUpgrade.values();
for (int i = 0; i < defaultUpgrades.length; i++) { for (int i = 0; i < defaultUpgrades.length; i++) {
DefaultUpgrade upgrade = defaultUpgrades[i]; DefaultUpgrade upgrade = defaultUpgrades[i];
@ -45,12 +44,12 @@ public class ItemInit{
} }
} }
public static final RegistryObject<Item> SCREEN = ITEMS.register("screen", () -> new BlockItem(BlockInit.blockScreen.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/)); public static final RegistryObject<Item> SCREEN = ITEMS.register("screen", () -> new BlockItem(BlockRegistry.SCREEN_BLOCk.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/));
public static final RegistryObject<Item> KEYBOARD = ITEMS.register("keyboard", () -> new KeyboardItem(BlockInit.blockKeyBoard.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/)); public static final RegistryObject<Item> KEYBOARD = ITEMS.register("keyboard", () -> new KeyboardItem(BlockRegistry.KEYBOARD_BLOCK.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/));
public static final RegistryObject<Item> REDSTONE_CONTROLLER = ITEMS.register("redctrl", () -> new BlockItem(BlockInit.blockRedControl.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/)); public static final RegistryObject<Item> REDSTONE_CONTROLLER = ITEMS.register("redctrl", () -> new BlockItem(BlockRegistry.REDSTONE_CONTROL_BLOCK.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/));
public static final RegistryObject<Item> REMOTE_CONTROLLER = ITEMS.register("rctrl", () -> new BlockItem(BlockInit.blockRControl.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/)); public static final RegistryObject<Item> REMOTE_CONTROLLER = ITEMS.register("rctrl", () -> new BlockItem(BlockRegistry.REMOTE_CONTROLLER_BLOCK.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/));
public static final RegistryObject<Item> SERVER = ITEMS.register("server", () -> new BlockItem(BlockInit.blockServer.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/)); public static final RegistryObject<Item> SERVER = ITEMS.register("server", () -> new BlockItem(BlockRegistry.SERVER_BLOCK.get(), new Item.Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/));
public static RegistryObject<Item> getComputerCraftItem(int index) { public static RegistryObject<Item> getComputerCraftItem(int index) {
return COMP_CRAFT_ITEMS[index]; return COMP_CRAFT_ITEMS[index];

View File

@ -0,0 +1,34 @@
package net.montoyo.wd.registry;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import net.montoyo.wd.entity.*;
public class TileRegistry {
public static final DeferredRegister<BlockEntityType<?>> TILE_TYPES = DeferredRegister
.create(ForgeRegistries.BLOCK_ENTITY_TYPES, "webdisplays");
//Register tile entities
public static final RegistryObject<BlockEntityType<ScreenBlockEntity>> SCREEN_BLOCK_ENTITY = TILE_TYPES
.register("screen", () -> BlockEntityType.Builder
.of(ScreenBlockEntity::new, BlockRegistry.SCREEN_BLOCk.get()).build(null));
public static final RegistryObject<BlockEntityType<?>> KEYBOARD = TILE_TYPES.register("kb_left", () -> BlockEntityType.Builder
.of(KeyboardBlockEntity::new, BlockRegistry.KEYBOARD_BLOCK.get()).build(null));
public static final RegistryObject<BlockEntityType<?>> REMOTE_CONTROLLER = TILE_TYPES.register("rctrl",
() -> BlockEntityType.Builder.of(RemoteControlBlockEntity::new, BlockRegistry.REMOTE_CONTROLLER_BLOCK.get()).build(null)); //WITHOUT FACING (>= 3)
public static final RegistryObject<BlockEntityType<?>> REDSTONE_CONTROLLER = TILE_TYPES.register("redctrl",
() -> BlockEntityType.Builder.of(RedstoneControlBlockEntity::new, BlockRegistry.REDSTONE_CONTROL_BLOCK.get()).build(null));
public static final RegistryObject<BlockEntityType<?>> SERVER = TILE_TYPES.register("server",
() -> BlockEntityType.Builder.of(ServerBlockEntity::new, BlockRegistry.SERVER_BLOCK.get()).build(null));
public static void init(IEventBus bus) {
TILE_TYPES.register(bus);
}
}

View File

@ -2,7 +2,7 @@
* Copyright (C) 2018 BARBOTIN Nicolas * Copyright (C) 2018 BARBOTIN Nicolas
*/ */
package net.montoyo.wd.init; package net.montoyo.wd.registry;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -11,38 +11,37 @@ import net.minecraft.world.item.ItemStack;
import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.RegistryObject; import net.minecraftforge.registries.RegistryObject;
import net.montoyo.wd.init.ItemInit;
public class TabInit { public class WDTabs {
public static final DeferredRegister<CreativeModeTab> TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, "webdisplays"); public static final DeferredRegister<CreativeModeTab> TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, "webdisplays");
public static final RegistryObject<CreativeModeTab> EXAMPLE_TAB = TABS.register("main", () -> CreativeModeTab.builder() public static final RegistryObject<CreativeModeTab> EXAMPLE_TAB = TABS.register("main", () -> CreativeModeTab.builder()
// Set name of tab to display // Set name of tab to display
.title(Component.translatable("itemGroup.webdisplays")) .title(Component.translatable("itemGroup.webdisplays"))
// Set icon of creative tab // Set icon of creative tab
.icon(() -> new ItemStack(ItemInit.SCREEN.get())) .icon(() -> new ItemStack(ItemRegistry.SCREEN.get()))
// Add default items to tab // Add default items to tab
.displayItems((params, output) -> { .displayItems((params, output) -> {
// core items // core items
output.accept(ItemInit.SCREEN.get()); output.accept(ItemRegistry.SCREEN.get());
output.accept(ItemInit.KEYBOARD.get()); output.accept(ItemRegistry.KEYBOARD.get());
output.accept(ItemInit.LINKER.get()); output.accept(ItemRegistry.LINKER.get());
// remote control // remote control
output.accept(ItemInit.REMOTE_CONTROLLER.get()); output.accept(ItemRegistry.REMOTE_CONTROLLER.get());
// redstone stuff // redstone stuff
output.accept(ItemInit.REDSTONE_CONTROLLER.get()); output.accept(ItemRegistry.REDSTONE_CONTROLLER.get());
// admin tools // admin tools
output.accept(ItemInit.OWNERSHIP_THEIF.get()); output.accept(ItemRegistry.OWNERSHIP_THEIF.get());
// tool items // tool items
output.accept(ItemInit.SERVER.get()); output.accept(ItemRegistry.SERVER.get());
output.accept(ItemInit.CONFIGURATOR.get()); output.accept(ItemRegistry.CONFIGURATOR.get());
output.accept(ItemInit.MINEPAD.get()); output.accept(ItemRegistry.MINEPAD.get());
output.accept(ItemInit.LASER_POINTER.get()); output.accept(ItemRegistry.LASER_POINTER.get());
// upgrades // upgrades
for (int i = 0; i < ItemInit.countUpgrades(); i++) output.accept(ItemInit.getUpgradeItem(i).get()); for (int i = 0; i < ItemRegistry.countUpgrades(); i++) output.accept(ItemRegistry.getUpgradeItem(i).get());
// cc // cc
for (int i = 0; i < ItemInit.countCompCraftItems(); i++) output.accept(ItemInit.getComputerCraftItem(i).get()); for (int i = 0; i < ItemRegistry.countCompCraftItems(); i++) output.accept(ItemRegistry.getComputerCraftItem(i).get());
}) })
.build() .build()
); );

View File

@ -1,53 +0,0 @@
/*
* Copyright (C) 2018 BARBOTIN Nicolas
*/
package net.montoyo.wd.utilities;
public enum BlockSide {
BOTTOM(new Vector3i( 0, 0, -1), new Vector3i( 1, 0, 0), new Vector3i( 0, -1, 0)),
TOP (new Vector3i( 0, 0, -1), new Vector3i( 1, 0, 0), new Vector3i( 0, 1, 0)),
NORTH (new Vector3i( 0, 1, 0), new Vector3i(-1, 0, 0), new Vector3i( 0, 0, -1)),
SOUTH (new Vector3i( 0, 1, 0), new Vector3i( 1, 0, 0), new Vector3i( 0, 0, 1)),
WEST (new Vector3i( 0, 1, 0), new Vector3i( 0, 0, 1), new Vector3i(-1, 0, 0)),
EAST (new Vector3i( 0, 1, 0), new Vector3i( 0, 0, -1), new Vector3i( 1, 0, 0));
public final Vector3i up;
public final Vector3i right;
public final Vector3i forward;
public final Vector3i down;
public final Vector3i left;
public final Vector3i backward;
BlockSide(Vector3i u, Vector3i r, Vector3i f) {
up = u;
right = r;
forward = f;
down = u.clone().neg();
left = r.clone().neg();
backward = f.clone().neg();
}
public BlockSide reverse()
{
int side = ordinal();
int div = side / 2;
int rest = 1 - side % 2;
return values()[div * 2 + rest];
}
public static int reverse(int side) {
int div = side / 2;
int rest = 1 - side % 2;
return div * 2 + rest;
}
public static BlockSide fromInt(int s) {
BlockSide[] values = values();
return (s < 0 || s >= values.length) ? null : values[s];
}
}

View File

@ -8,9 +8,9 @@ public class DistSafety {
return new ClientProxy(); return new ClientProxy();
} }
public static boolean isConnected() { public static boolean isConnected() {
if (Minecraft.getInstance().getConnection() == null) return false; if (Minecraft.getInstance().getConnection() == null) return false;
if (Minecraft.getInstance().getConnection().getConnection().isConnecting()) return false; if (Minecraft.getInstance().getConnection().getConnection().isConnecting()) return false;
return Minecraft.getInstance().getConnection().getConnection().isConnected(); return Minecraft.getInstance().getConnection().getConnection().isConnected();
} }
} }

View File

@ -8,29 +8,27 @@ import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
public abstract class Log { public abstract class Log {
public static void info(String what, Object... data) {
public static void info(String what, Object ... data) {
LogManager.getLogger("WebDisplays").log(Level.INFO, String.format(what, data)); LogManager.getLogger("WebDisplays").log(Level.INFO, String.format(what, data));
} }
public static void warning(String what, Object ... data) { public static void warning(String what, Object... data) {
LogManager.getLogger("WebDisplays").log(Level.WARN, String.format(what, data)); LogManager.getLogger("WebDisplays").log(Level.WARN, String.format(what, data));
} }
public static void error(String what, Object ... data) { public static void error(String what, Object... data) {
LogManager.getLogger("WebDisplays").log(Level.ERROR, String.format(what, data)); LogManager.getLogger("WebDisplays").log(Level.ERROR, String.format(what, data));
} }
public static void infoEx(String what, Throwable e, Object ... data) { public static void infoEx(String what, Throwable e, Object... data) {
LogManager.getLogger("WebDisplays").log(Level.INFO, String.format(what, data), e); LogManager.getLogger("WebDisplays").log(Level.INFO, String.format(what, data), e);
} }
public static void warningEx(String what, Throwable e, Object ... data) { public static void warningEx(String what, Throwable e, Object... data) {
LogManager.getLogger("WebDisplays").log(Level.WARN, String.format(what, data), e); LogManager.getLogger("WebDisplays").log(Level.WARN, String.format(what, data), e);
} }
public static void errorEx(String what, Throwable e, Object ... data) { public static void errorEx(String what, Throwable e, Object... data) {
LogManager.getLogger("WebDisplays").log(Level.ERROR, String.format(what, data), e); LogManager.getLogger("WebDisplays").log(Level.ERROR, String.format(what, data), e);
} }
} }

View File

@ -6,11 +6,12 @@ package net.montoyo.wd.utilities;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelAccessor;
import net.montoyo.wd.WebDisplays; import net.montoyo.wd.registry.BlockRegistry;
import net.montoyo.wd.init.BlockInit; import net.montoyo.wd.utilities.math.Vector2i;
import net.montoyo.wd.utilities.math.Vector3i;
import net.montoyo.wd.utilities.data.BlockSide;
public abstract class Multiblock { public abstract class Multiblock {
public enum OverrideAction { public enum OverrideAction {
NONE, NONE,
SIMULATE, SIMULATE,
@ -27,9 +28,9 @@ public abstract class Multiblock {
} }
public boolean apply(Vector3i bp, boolean originalResult) { public boolean apply(Vector3i bp, boolean originalResult) {
if(action == OverrideAction.NONE || !bp.equals(pos)) if (action == OverrideAction.NONE || !bp.equals(pos))
return originalResult; return originalResult;
else if(action == OverrideAction.SIMULATE) else if (action == OverrideAction.SIMULATE)
return true; return true;
else //action == OverrideAction.IGNORE else //action == OverrideAction.IGNORE
return false; return false;
@ -40,9 +41,8 @@ public abstract class Multiblock {
public static final BlockOverride NULL_OVERRIDE = new BlockOverride(null, OverrideAction.NONE); public static final BlockOverride NULL_OVERRIDE = new BlockOverride(null, OverrideAction.NONE);
//Modifies pos //Modifies pos
public static void findOrigin(LevelAccessor world, Vector3i pos, BlockSide side, BlockOverride override) public static void findOrigin(LevelAccessor world, Vector3i pos, BlockSide side, BlockOverride override) {
{ if (override == null)
if(override == null)
override = NULL_OVERRIDE; override = NULL_OVERRIDE;
BlockPos.MutableBlockPos bp = new BlockPos.MutableBlockPos(); BlockPos.MutableBlockPos bp = new BlockPos.MutableBlockPos();
@ -51,7 +51,7 @@ public abstract class Multiblock {
do { do {
pos.add(side.left); pos.add(side.left);
pos.toBlock(bp); pos.toBlock(bp);
} while(override.apply(pos, world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get())); } while (override.apply(pos, world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get()));
pos.add(side.right); pos.add(side.right);
@ -59,14 +59,13 @@ public abstract class Multiblock {
do { do {
pos.add(side.down); pos.add(side.down);
pos.toBlock(bp); pos.toBlock(bp);
} while(override.apply(pos, world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get())); } while (override.apply(pos, world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get()));
pos.add(side.up); pos.add(side.up);
} }
//Origin stays constant //Origin stays constant
public static Vector2i measure(LevelAccessor world, Vector3i origin, BlockSide side) public static Vector2i measure(LevelAccessor world, Vector3i origin, BlockSide side) {
{
Vector2i ret = new Vector2i(); Vector2i ret = new Vector2i();
Vector3i pos = origin.clone(); Vector3i pos = origin.clone();
@ -78,7 +77,7 @@ public abstract class Multiblock {
pos.add(side.up); pos.add(side.up);
pos.toBlock(bp); pos.toBlock(bp);
ret.y++; ret.y++;
} while(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get()); } while (world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get());
pos.add(side.down); pos.add(side.down);
@ -87,33 +86,32 @@ public abstract class Multiblock {
pos.add(side.right); pos.add(side.right);
pos.toBlock(bp); pos.toBlock(bp);
ret.x++; ret.x++;
} while(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get()); } while (world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get());
return ret; return ret;
} }
//Origin and size stays constant. //Origin and size stays constant.
//Returns null if structure is okay, otherwise the erroring block pos. //Returns null if structure is okay, otherwise the erroring block pos.
public static Vector3i check(LevelAccessor world, Vector3i origin, Vector2i size, BlockSide side) public static Vector3i check(LevelAccessor world, Vector3i origin, Vector2i size, BlockSide side) {
{
Vector3i pos = origin.clone(); Vector3i pos = origin.clone();
BlockPos.MutableBlockPos bp = new BlockPos.MutableBlockPos(); BlockPos.MutableBlockPos bp = new BlockPos.MutableBlockPos();
//Check inner //Check inner
for(int y = 0; y < size.y; y++) { for (int y = 0; y < size.y; y++) {
for(int x = 0; x < size.x; x++) { for (int x = 0; x < size.x; x++) {
pos.toBlock(bp); pos.toBlock(bp);
if(!(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get())) if (!(world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get()))
return pos; //Hole return pos; //Hole
pos.add(side.forward); pos.add(side.forward);
pos.toBlock(bp); pos.toBlock(bp);
if(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get()) if (world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get())
return pos; //Back should be empty return pos; //Back should be empty
pos.addMul(side.backward, 2); pos.addMul(side.backward, 2);
pos.toBlock(bp); pos.toBlock(bp);
if(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get()) if (world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get())
return pos; //Front should be empty return pos; //Front should be empty
pos.add(side.forward); pos.add(side.forward);
@ -128,9 +126,9 @@ public abstract class Multiblock {
pos.set(origin); pos.set(origin);
pos.add(side.left); pos.add(side.left);
for(int y = 0; y < size.y; y++) { for (int y = 0; y < size.y; y++) {
pos.toBlock(bp); pos.toBlock(bp);
if(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get()) if (world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get())
return pos; //Left edge should be empty return pos; //Left edge should be empty
pos.add(side.up); pos.add(side.up);
@ -140,9 +138,9 @@ public abstract class Multiblock {
pos.set(origin); pos.set(origin);
pos.addMul(side.right, size.x); pos.addMul(side.right, size.x);
for(int y = 0; y < size.y; y++) { for (int y = 0; y < size.y; y++) {
pos.toBlock(bp); pos.toBlock(bp);
if(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get()) if (world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get())
return pos; //Left edge should be empty return pos; //Left edge should be empty
pos.add(side.up); pos.add(side.up);
@ -152,9 +150,9 @@ public abstract class Multiblock {
pos.set(origin); pos.set(origin);
pos.add(side.down); pos.add(side.down);
for(int x = 0; x < size.x; x++) { for (int x = 0; x < size.x; x++) {
pos.toBlock(bp); pos.toBlock(bp);
if(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get()) if (world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get())
return pos; //Left edge should be empty return pos; //Left edge should be empty
pos.add(side.right); pos.add(side.right);
@ -164,9 +162,9 @@ public abstract class Multiblock {
pos.set(origin); pos.set(origin);
pos.addMul(side.up, size.y); pos.addMul(side.up, size.y);
for(int x = 0; x < size.x; x++) { for (int x = 0; x < size.x; x++) {
pos.toBlock(bp); pos.toBlock(bp);
if(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get()) if (world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get())
return pos; //Left edge should be empty return pos; //Left edge should be empty
pos.add(side.right); pos.add(side.right);
@ -175,5 +173,4 @@ public abstract class Multiblock {
//All good. //All good.
return null; return null;
} }
} }

Some files were not shown because too many files have changed in this diff Show More