format.
This commit is contained in:
parent
aa8c545089
commit
a9d9dcfecf
|
|
@ -42,10 +42,10 @@ import net.montoyo.wd.config.ClientConfig;
|
|||
import net.montoyo.wd.config.CommonConfig;
|
||||
import net.montoyo.wd.controls.ScreenControlRegistry;
|
||||
import net.montoyo.wd.core.*;
|
||||
import net.montoyo.wd.init.BlockInit;
|
||||
import net.montoyo.wd.init.ItemInit;
|
||||
import net.montoyo.wd.init.TabInit;
|
||||
import net.montoyo.wd.init.TileInit;
|
||||
import net.montoyo.wd.registry.BlockRegistry;
|
||||
import net.montoyo.wd.registry.ItemRegistry;
|
||||
import net.montoyo.wd.registry.WDTabs;
|
||||
import net.montoyo.wd.registry.TileRegistry;
|
||||
import net.montoyo.wd.miniserv.server.Server;
|
||||
import net.montoyo.wd.net.WDNetworkRegistry;
|
||||
import net.montoyo.wd.net.client_bound.S2CMessageServerInfo;
|
||||
|
|
@ -130,10 +130,10 @@ public class WebDisplays {
|
|||
WDNetworkRegistry.init();
|
||||
SOUNDS.register(bus);
|
||||
onRegisterSounds();
|
||||
TabInit.init(bus);
|
||||
BlockInit.init(bus);
|
||||
ItemInit.init(bus);
|
||||
TileInit.init(bus);
|
||||
WDTabs.init(bus);
|
||||
BlockRegistry.init(bus);
|
||||
ItemRegistry.init(bus);
|
||||
TileRegistry.init(bus);
|
||||
|
||||
PROXY.preInit();
|
||||
|
||||
|
|
@ -253,7 +253,7 @@ public class WebDisplays {
|
|||
if(!ev.getEntity().level().isClientSide) {
|
||||
ItemStack is = ev.getEntity().getItem();
|
||||
|
||||
if(is.getItem() == ItemInit.MINEPAD.get()) {
|
||||
if(is.getItem() == ItemRegistry.MINEPAD.get()) {
|
||||
CompoundTag tag = is.getTag();
|
||||
|
||||
if(tag == null) {
|
||||
|
|
@ -271,7 +271,7 @@ public class WebDisplays {
|
|||
|
||||
@SubscribeEvent
|
||||
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) {
|
||||
ev.getCrafting().setDamageValue(CraftComponent.BADEXTCARD.ordinal());
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ import net.montoyo.wd.net.client_bound.S2CMessageCloseGui;
|
|||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class BlockKeyboardLeft extends BlockPeripheral {
|
||||
|
||||
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 HALF = DirectionProperty.create("facing", Direction.EAST, Direction.WEST);
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ import static net.montoyo.wd.block.BlockPeripheral.point;
|
|||
|
||||
// TODO: merge into KeyboardLeft
|
||||
public class BlockKeyboardRight extends Block implements IPeripheral {
|
||||
|
||||
public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING;
|
||||
|
||||
public BlockKeyboardRight() {
|
||||
|
|
|
|||
|
|
@ -49,12 +49,12 @@ public class BlockPeripheral extends WDBlockContainer {
|
|||
@Override
|
||||
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
|
||||
BlockEntityType.BlockEntitySupplier<? extends BlockEntity> cls = type.getTEClass();
|
||||
if(cls == null)
|
||||
if (cls == null)
|
||||
return null;
|
||||
|
||||
try {
|
||||
return cls.create(pos, state);
|
||||
} catch(Throwable t) {
|
||||
} catch (Throwable t) {
|
||||
Log.errorEx("Couldn't instantiate peripheral TileEntity:", t);
|
||||
}
|
||||
|
||||
|
|
@ -68,17 +68,17 @@ public class BlockPeripheral extends WDBlockContainer {
|
|||
|
||||
@Override
|
||||
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) {
|
||||
if(player.isShiftKeyDown())
|
||||
if (player.isShiftKeyDown())
|
||||
return InteractionResult.FAIL;
|
||||
|
||||
if(player.getItemInHand(hand).getItem() instanceof ItemLinker)
|
||||
if (player.getItemInHand(hand).getItem() instanceof ItemLinker)
|
||||
return InteractionResult.FAIL;
|
||||
|
||||
BlockEntity te = world.getBlockEntity(pos);
|
||||
|
||||
if(te instanceof TileEntityPeripheralBase)
|
||||
if (te instanceof TileEntityPeripheralBase)
|
||||
return ((TileEntityPeripheralBase) te).onRightClick(player, hand);
|
||||
else if(te instanceof TileEntityServer) {
|
||||
else if (te instanceof TileEntityServer) {
|
||||
((TileEntityServer) te).onPlayerRightClick(player);
|
||||
return InteractionResult.SUCCESS;
|
||||
} else
|
||||
|
|
@ -92,15 +92,15 @@ public class BlockPeripheral extends WDBlockContainer {
|
|||
|
||||
@Override
|
||||
public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) {
|
||||
if(world.isClientSide)
|
||||
if (world.isClientSide)
|
||||
return;
|
||||
|
||||
if(placer instanceof Player) {
|
||||
if (placer instanceof Player) {
|
||||
BlockEntity te = world.getBlockEntity(pos);
|
||||
|
||||
if(te instanceof TileEntityServer)
|
||||
if (te instanceof TileEntityServer)
|
||||
((TileEntityServer) te).setOwner((Player) placer);
|
||||
else if(te instanceof TileEntityInterfaceBase)
|
||||
else if (te instanceof TileEntityInterfaceBase)
|
||||
((TileEntityInterfaceBase) te).setOwner((Player) placer);
|
||||
}
|
||||
}
|
||||
|
|
@ -113,13 +113,13 @@ public class BlockPeripheral extends WDBlockContainer {
|
|||
@Override
|
||||
public void neighborChanged(BlockState state, Level world, BlockPos pos, Block neighborType, BlockPos neighbor, boolean isMoving) {
|
||||
BlockEntity te = world.getBlockEntity(pos);
|
||||
if(te instanceof TileEntityPeripheralBase)
|
||||
if (te instanceof TileEntityPeripheralBase)
|
||||
((TileEntityPeripheralBase) te).onNeighborChange(neighborType, neighbor);
|
||||
}
|
||||
|
||||
@Override
|
||||
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));
|
||||
}
|
||||
super.playerDestroy(world, player, pos, state, blockEntity, tool);
|
||||
|
|
@ -133,7 +133,7 @@ public class BlockPeripheral extends WDBlockContainer {
|
|||
public static PacketDistributor.TargetPoint point(Player exclude, Level world, BlockPos bp) {
|
||||
return new PacketDistributor.TargetPoint((ServerPlayer) exclude, bp.getX(), bp.getY(), bp.getZ(), 64.0, world.dimension());
|
||||
}
|
||||
|
||||
|
||||
public static PacketDistributor.TargetPoint point(Level world, BlockPos bp) {
|
||||
return new PacketDistributor.TargetPoint(bp.getX(), bp.getY(), bp.getZ(), 64.0, world.dimension());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,10 +13,8 @@ import net.minecraft.world.InteractionResult;
|
|||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
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.Block;
|
||||
import net.minecraft.world.level.block.RenderShape;
|
||||
|
|
@ -35,13 +33,11 @@ import net.montoyo.wd.core.IUpgrade;
|
|||
import net.montoyo.wd.core.ScreenRights;
|
||||
import net.montoyo.wd.data.SetURLData;
|
||||
import net.montoyo.wd.entity.TileEntityScreen;
|
||||
import net.montoyo.wd.init.BlockInit;
|
||||
import net.montoyo.wd.item.ItemLaserPointer;
|
||||
import net.montoyo.wd.utilities.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class BlockScreen extends BaseEntityBlock {
|
||||
|
||||
public static final BooleanProperty hasTE = BooleanProperty.create("haste");
|
||||
public static final BooleanProperty emitting = BooleanProperty.create("emitting");
|
||||
private static final Property<?>[] properties = new Property<?>[]{hasTE, emitting};
|
||||
|
|
@ -51,47 +47,11 @@ public class BlockScreen extends BaseEntityBlock {
|
|||
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
|
||||
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?
|
||||
if (p_60518_.getBlock() == p_60515_.getBlock()) return;
|
||||
|
||||
|
||||
for (BlockSide value : BlockSide.values()) {
|
||||
Vector3i vec = new Vector3i(p_60517_.getX(), p_60517_.getY(), p_60517_.getZ());
|
||||
Multiblock.findOrigin(p_60516_, vec, value, null);
|
||||
|
|
@ -118,7 +78,7 @@ public class BlockScreen extends BaseEntityBlock {
|
|||
return InteractionResult.FAIL;
|
||||
else if (heldItem.getItem() instanceof ItemLaserPointer)
|
||||
return InteractionResult.FAIL; // laser pointer already handles stuff
|
||||
|
||||
|
||||
// handling the off hand leads to double clicking
|
||||
if (!isUpgrade && hand == InteractionHand.OFF_HAND)
|
||||
return InteractionResult.FAIL;
|
||||
|
|
@ -138,7 +98,7 @@ public class BlockScreen extends BaseEntityBlock {
|
|||
TileEntityScreen.Screen scr = te.getScreen(side);
|
||||
|
||||
if (sneaking) { //Right Click
|
||||
if((scr.rightsFor(player) & ScreenRights.CHANGE_URL) == 0)
|
||||
if ((scr.rightsFor(player) & ScreenRights.CHANGE_URL) == 0)
|
||||
Util.toast(player, "restrictions");
|
||||
else
|
||||
(new SetURLData(pos, scr.side, scr.url)).sendTo((ServerPlayer) player);
|
||||
|
|
@ -170,11 +130,11 @@ public class BlockScreen extends BaseEntityBlock {
|
|||
}
|
||||
|
||||
Vector2i tmp = new Vector2i();
|
||||
|
||||
|
||||
float hitX = ((float) hit.getLocation().x) - (float) te.getBlockPos().getX();
|
||||
float hitY = ((float) hit.getLocation().y) - (float) te.getBlockPos().getY();
|
||||
float hitZ = ((float) hit.getLocation().z) - (float) te.getBlockPos().getZ();
|
||||
|
||||
|
||||
if (hit2pixels(side, hit.getBlockPos(), new Vector3i(hit.getBlockPos()), scr, hitX, hitY, hitZ, tmp))
|
||||
te.click(side, tmp);
|
||||
return InteractionResult.CONSUME;
|
||||
|
|
@ -218,7 +178,7 @@ public class BlockScreen extends BaseEntityBlock {
|
|||
|
||||
@Override
|
||||
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)) {
|
||||
for (BlockSide side : BlockSide.values()) {
|
||||
Vector3i vec = new Vector3i(pos);
|
||||
|
|
@ -233,79 +193,57 @@ 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) {
|
||||
if(side.right.x < 0)
|
||||
hitX -= 1.f;
|
||||
|
||||
if(side.right.z < 0 || side == BlockSide.TOP || side == BlockSide.BOTTOM)
|
||||
hitZ -= 1.f;
|
||||
|
||||
Vector3f rel = new Vector3f(bpos.getX(), bpos.getY(), bpos.getZ());
|
||||
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 cy = rel.dot(side.up.toFloat()) - 2.f / 16.f;
|
||||
float sw = ((float) scr.size.x) - 4.f / 16.f;
|
||||
float sh = ((float) scr.size.y) - 4.f / 16.f;
|
||||
|
||||
cx /= sw;
|
||||
cy /= sh;
|
||||
|
||||
if(cx >= 0.f && cx <= 1.0 && cy >= 0.f && cy <= 1.f) {
|
||||
if(side != BlockSide.BOTTOM)
|
||||
Vector3f rel = new Vector3f(hitX, hitY, hitZ);
|
||||
|
||||
// how these dot products come in is beyond me
|
||||
float cx = rel.dot(side.horizontal.toFloat()) - 2.f / 16.f;
|
||||
float cy = rel.dot(side.vertical.toFloat()) - 2.f / 16.f;
|
||||
|
||||
// scale coordinate to be in the size mcef expects (0 -> 1)
|
||||
cx /= ((float) scr.size.x) - 4.f / 16.f;
|
||||
cy /= ((float) scr.size.y) - 4.f / 16.f;
|
||||
|
||||
if (cx >= 0.f && cx <= 1.0 && cy >= 0.f && cy <= 1.f) {
|
||||
if (side != BlockSide.BOTTOM)
|
||||
cy = 1.f - cy;
|
||||
|
||||
switch(scr.rotation) {
|
||||
|
||||
switch (scr.rotation) {
|
||||
case ROT_90:
|
||||
cy = 1.0f - cy;
|
||||
break;
|
||||
|
||||
|
||||
case ROT_180:
|
||||
cx = 1.0f - cx;
|
||||
cy = 1.0f - cy;
|
||||
break;
|
||||
|
||||
|
||||
case ROT_270:
|
||||
cx = 1.0f - cx;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
cx *= (float) scr.resolution.x;
|
||||
cy *= (float) scr.resolution.y;
|
||||
|
||||
if(scr.rotation.isVertical) {
|
||||
|
||||
if (scr.rotation.isVertical) {
|
||||
dst.x = (int) cy;
|
||||
dst.y = (int) cx;
|
||||
} else {
|
||||
dst.x = (int) cx;
|
||||
dst.y = (int) cy;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
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 *************************************************/
|
||||
|
||||
private void onDestroy (Level world, BlockPos pos, Player ply){
|
||||
private void onDestroy(Level world, BlockPos pos, Player ply) {
|
||||
if (!world.isClientSide) {
|
||||
Vector3i bp = new Vector3i(pos);
|
||||
Multiblock.BlockOverride override = new Multiblock.BlockOverride(bp, Multiblock.OverrideAction.SIMULATE);
|
||||
|
|
@ -315,8 +253,8 @@ public class BlockScreen extends BaseEntityBlock {
|
|||
}
|
||||
}
|
||||
|
||||
private void destroySide (Level world, Vector3i pos, BlockSide side, Multiblock.BlockOverride override, Player
|
||||
source){
|
||||
private void destroySide(Level world, Vector3i pos, BlockSide side, Multiblock.BlockOverride override, Player
|
||||
source) {
|
||||
Multiblock.findOrigin(world, pos, side, override);
|
||||
BlockPos bp = pos.toBlock();
|
||||
BlockEntity te = world.getBlockEntity(bp);
|
||||
|
|
@ -328,15 +266,15 @@ public class BlockScreen extends BaseEntityBlock {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean onDestroyedByPlayer (BlockState state, Level level, BlockPos pos, Player player,
|
||||
boolean willHarvest, FluidState fluid){
|
||||
public boolean onDestroyedByPlayer(BlockState state, Level level, BlockPos pos, Player player,
|
||||
boolean willHarvest, FluidState fluid) {
|
||||
onDestroy(level, pos, player);
|
||||
return super.onDestroyedByPlayer(state, level, pos, player, willHarvest, fluid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlacedBy (Level world, @NotNull BlockPos pos, @NotNull BlockState
|
||||
state, @org.jetbrains.annotations.Nullable LivingEntity whoDidThisShit, @NotNull ItemStack stack){
|
||||
public void setPlacedBy(Level world, @NotNull BlockPos pos, @NotNull BlockState
|
||||
state, @org.jetbrains.annotations.Nullable LivingEntity whoDidThisShit, @NotNull ItemStack stack) {
|
||||
if (world.isClientSide)
|
||||
return;
|
||||
|
||||
|
|
@ -358,18 +296,35 @@ public class BlockScreen extends BaseEntityBlock {
|
|||
}
|
||||
}
|
||||
|
||||
/************************************************* STUFF THAT'S UNLIKELY TO BE TOUCHED BUT NEEDS TO BE HERE *************************************************/
|
||||
|
||||
@Override
|
||||
public @NotNull PushReaction getPistonPushReaction (BlockState state){
|
||||
public @NotNull PushReaction getPistonPushReaction(BlockState state) {
|
||||
return PushReaction.IGNORE;
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSignalSource (BlockState state){
|
||||
public boolean isSignalSource(BlockState state) {
|
||||
return state.getValue(emitting);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
|
||||
return state.getValue(hasTE) ? new TileEntityScreen(pos, state) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RenderShape getRenderShape(BlockState state) {
|
||||
return RenderShape.MODEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
||||
builder.add(properties);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,47 +8,47 @@ import net.minecraft.world.level.Level;
|
|||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.montoyo.wd.block.BlockKeyboardLeft;
|
||||
import net.montoyo.wd.init.BlockInit;
|
||||
import net.montoyo.wd.registry.BlockRegistry;
|
||||
|
||||
public class KeyboardItem extends BlockItem {
|
||||
public KeyboardItem(Block arg, Properties arg2) {
|
||||
super(arg, arg2);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean placeBlock(BlockPlaceContext arg, BlockState arg2) {
|
||||
Direction facing = arg.getHorizontalDirection();
|
||||
arg2 = arg2.setValue(BlockKeyboardLeft.FACING, facing);
|
||||
|
||||
Direction d = BlockKeyboardLeft.mapDirection(facing);
|
||||
|
||||
if (isValid(arg.getClickedPos(), arg.getLevel(), arg2, d)) {
|
||||
Block kbRight = BlockInit.blockKbRight.get();
|
||||
BlockState rightState = kbRight.defaultBlockState();
|
||||
|
||||
rightState = rightState.setValue(BlockKeyboardLeft.FACING, facing);
|
||||
if (!arg.getLevel().setBlock(
|
||||
arg.getClickedPos().relative(d),
|
||||
rightState,
|
||||
11
|
||||
)) return false;
|
||||
return arg.getLevel().setBlock(arg.getClickedPos(), arg2, 11);// 161
|
||||
} else if (isValid(arg.getClickedPos().relative(d.getOpposite(), 2), arg.getLevel(), arg2, d)) {
|
||||
Block kbRight = BlockInit.blockKbRight.get();
|
||||
BlockState rightState = kbRight.defaultBlockState();
|
||||
|
||||
rightState = rightState.setValue(BlockKeyboardLeft.FACING, facing);
|
||||
if (!arg.getLevel().setBlock(
|
||||
arg.getClickedPos(),
|
||||
rightState,
|
||||
11
|
||||
)) return false;
|
||||
return arg.getLevel().setBlock(arg.getClickedPos().relative(d.getOpposite()), arg2, 11);// 161
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isValid(BlockPos pos, Level level, BlockState state, Direction d) {
|
||||
return level.getBlockState(pos.relative(d)).isAir();
|
||||
}
|
||||
public KeyboardItem(Block arg, Properties arg2) {
|
||||
super(arg, arg2);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean placeBlock(BlockPlaceContext arg, BlockState arg2) {
|
||||
Direction facing = arg.getHorizontalDirection();
|
||||
arg2 = arg2.setValue(BlockKeyboardLeft.FACING, facing);
|
||||
|
||||
Direction d = BlockKeyboardLeft.mapDirection(facing);
|
||||
|
||||
if (isValid(arg.getClickedPos(), arg.getLevel(), arg2, d)) {
|
||||
Block kbRight = BlockRegistry.blockKbRight.get();
|
||||
BlockState rightState = kbRight.defaultBlockState();
|
||||
|
||||
rightState = rightState.setValue(BlockKeyboardLeft.FACING, facing);
|
||||
if (!arg.getLevel().setBlock(
|
||||
arg.getClickedPos().relative(d),
|
||||
rightState,
|
||||
11
|
||||
)) return false;
|
||||
return arg.getLevel().setBlock(arg.getClickedPos(), arg2, 11);// 161
|
||||
} else if (isValid(arg.getClickedPos().relative(d.getOpposite(), 2), arg.getLevel(), arg2, d)) {
|
||||
Block kbRight = BlockRegistry.blockKbRight.get();
|
||||
BlockState rightState = kbRight.defaultBlockState();
|
||||
|
||||
rightState = rightState.setValue(BlockKeyboardLeft.FACING, facing);
|
||||
if (!arg.getLevel().setBlock(
|
||||
arg.getClickedPos(),
|
||||
rightState,
|
||||
11
|
||||
)) return false;
|
||||
return arg.getLevel().setBlock(arg.getClickedPos().relative(d.getOpposite()), arg2, 11);// 161
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isValid(BlockPos pos, Level level, BlockState state, Direction d) {
|
||||
return level.getBlockState(pos.relative(d)).isAir();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,13 +10,11 @@ import com.mojang.authlib.GameProfile;
|
|||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.mojang.blaze3d.platform.InputConstants;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.advancements.Advancement;
|
||||
import net.minecraft.advancements.AdvancementProgress;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.Options;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
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.RenderType;
|
||||
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.NonNullList;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
|
@ -66,14 +62,12 @@ import net.montoyo.wd.block.BlockScreen;
|
|||
import net.montoyo.wd.client.gui.*;
|
||||
import net.montoyo.wd.client.gui.loading.GuiLoader;
|
||||
import net.montoyo.wd.client.renderers.*;
|
||||
import net.montoyo.wd.config.ClientConfig;
|
||||
import net.montoyo.wd.core.HasAdvancement;
|
||||
import net.montoyo.wd.core.JSServerRequest;
|
||||
import net.montoyo.wd.data.GuiData;
|
||||
import net.montoyo.wd.entity.TileEntityScreen;
|
||||
import net.montoyo.wd.init.BlockInit;
|
||||
import net.montoyo.wd.init.ItemInit;
|
||||
import net.montoyo.wd.init.TileInit;
|
||||
import net.montoyo.wd.registry.BlockRegistry;
|
||||
import net.montoyo.wd.registry.ItemRegistry;
|
||||
import net.montoyo.wd.registry.TileRegistry;
|
||||
import net.montoyo.wd.item.ItemLaserPointer;
|
||||
import net.montoyo.wd.item.ItemMinePad2;
|
||||
import net.montoyo.wd.item.WDItem;
|
||||
|
|
@ -86,7 +80,6 @@ import org.cef.browser.CefBrowser;
|
|||
import org.cef.browser.CefFrame;
|
||||
import org.cef.handler.CefDisplayHandler;
|
||||
import org.cef.misc.CefCursorType;
|
||||
import org.cef.network.CefRequest;
|
||||
import org.joml.Vector3d;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
|
@ -150,7 +143,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
|
|||
|
||||
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);
|
||||
|
||||
poseStack.blit(new ResourceLocation(
|
||||
|
|
@ -242,7 +235,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
|
|||
/**************************************** INHERITED METHODS ****************************************/
|
||||
@SubscribeEvent
|
||||
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
|
||||
|
|
@ -780,10 +773,10 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
|
|||
Item item = ev.getItemStack().getItem();
|
||||
IItemRenderer renderer;
|
||||
|
||||
if (ItemInit.MINEPAD.isPresent() && ItemInit.LASER_POINTER.isPresent()) {
|
||||
if (item == ItemInit.MINEPAD.get())
|
||||
if (ItemRegistry.MINEPAD.isPresent() && ItemRegistry.LASER_POINTER.isPresent()) {
|
||||
if (item == ItemRegistry.MINEPAD.get())
|
||||
renderer = minePadRenderer;
|
||||
else if (item == ItemInit.LASER_POINTER.get())
|
||||
else if (item == ItemRegistry.LASER_POINTER.get())
|
||||
renderer = laserPointerRenderer;
|
||||
else
|
||||
return;
|
||||
|
|
@ -823,8 +816,8 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
|
|||
for (int i = 0; i < cnt; i++) {
|
||||
ItemStack item = inv.get(i);
|
||||
|
||||
if (ItemInit.MINEPAD.isPresent()) {
|
||||
if (item.getItem() == ItemInit.MINEPAD.get()) {
|
||||
if (ItemRegistry.MINEPAD.isPresent()) {
|
||||
if (item.getItem() == ItemRegistry.MINEPAD.get()) {
|
||||
CompoundTag tag = item.getTag();
|
||||
|
||||
if (tag != null && tag.contains("PadID"))
|
||||
|
|
|
|||
|
|
@ -16,10 +16,9 @@ import net.minecraft.world.phys.Vec3;
|
|||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
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 org.joml.Matrix4f;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import static com.mojang.math.Axis.*;
|
||||
|
||||
|
|
@ -40,7 +39,7 @@ public final class LaserPointerRenderer implements IItemRenderer {
|
|||
ClientProxy.mouseOn ||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ package net.montoyo.wd.core;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
// TODO: bring this back when SSR is implemented
|
||||
public class CCArguments implements IComputerArgs {
|
||||
|
||||
private final Object[] args;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
package net.montoyo.wd.core;
|
||||
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.montoyo.wd.init.ItemInit;
|
||||
import net.montoyo.wd.registry.ItemRegistry;
|
||||
|
||||
public enum CraftComponent {
|
||||
STONEKEY("stonekey", "StoneKey"),
|
||||
|
|
@ -32,6 +32,6 @@ public enum CraftComponent {
|
|||
}
|
||||
|
||||
public ItemStack makeItemStack() {
|
||||
return new ItemStack(ItemInit.getComputerCraftItem(ordinal()).get(), 1);
|
||||
return new ItemStack(ItemRegistry.getComputerCraftItem(ordinal()).get(), 1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,9 +20,7 @@ import java.util.Arrays;
|
|||
import java.util.HashMap;
|
||||
|
||||
public class Criterion implements CriterionTrigger<Criterion.Instance> {
|
||||
|
||||
public static class Instance extends AbstractCriterionTriggerInstance {
|
||||
|
||||
public Instance(ResourceLocation id, ContextAwarePredicate arg2) {
|
||||
super(id, arg2);
|
||||
}
|
||||
|
|
@ -67,10 +65,9 @@ public class Criterion implements CriterionTrigger<Criterion.Instance> {
|
|||
public void trigger(PlayerAdvancements 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
|
||||
Arrays.stream(copy).forEach(l -> l.run(ply));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,19 +12,18 @@ import net.montoyo.wd.entity.TileEntityKeyboard;
|
|||
import net.montoyo.wd.entity.TileEntityRCtrl;
|
||||
import net.montoyo.wd.entity.TileEntityRedCtrl;
|
||||
import net.montoyo.wd.entity.TileEntityServer;
|
||||
import net.montoyo.wd.init.BlockInit;
|
||||
import net.montoyo.wd.registry.BlockRegistry;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public enum DefaultPeripheral implements StringRepresentable {
|
||||
|
||||
KEYBOARD("keyboard", "Keyboard", TileEntityKeyboard::new, BlockInit.blockKeyBoard), //WITH FACING (< 3)
|
||||
KEYBOARD("keyboard", "Keyboard", TileEntityKeyboard::new, BlockRegistry.KEYBOARD_BLOCK), //WITH FACING (< 3)
|
||||
// CC_INTERFACE("ccinterface", "ComputerCraft_Interface", TileEntityCCInterface.class),
|
||||
// OC_INTERFACE("cointerface", "OpenComputers_Interface", TileEntityOCInterface.class),
|
||||
REMOTE_CONTROLLER("remotectrl", "Remote_Controller", TileEntityRCtrl::new ,BlockInit.blockRControl), //WITHOUT FACING (>= 3)
|
||||
REDSTONE_CONTROLLER("redstonectrl", "Redstone_Controller", TileEntityRedCtrl::new ,BlockInit.blockRedControl),
|
||||
SERVER("server", "Server", TileEntityServer::new, BlockInit.blockServer);
|
||||
REMOTE_CONTROLLER("remotectrl", "Remote_Controller", TileEntityRCtrl::new , BlockRegistry.REMOTE_CONTROLLER_BLOCK), //WITHOUT FACING (>= 3)
|
||||
REDSTONE_CONTROLLER("redstonectrl", "Redstone_Controller", TileEntityRedCtrl::new , BlockRegistry.REDSTONE_CONTROL_BLOCK),
|
||||
SERVER("server", "Server", TileEntityServer::new, BlockRegistry.SERVER_BLOCK);
|
||||
|
||||
private final String name;
|
||||
private final String wikiName;
|
||||
|
|
|
|||
|
|
@ -5,9 +5,7 @@
|
|||
package net.montoyo.wd.core;
|
||||
|
||||
public enum HasAdvancement {
|
||||
|
||||
DONT_KNOW,
|
||||
YES,
|
||||
NO
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,8 @@ package net.montoyo.wd.core;
|
|||
import java.util.Map;
|
||||
|
||||
public interface IComputerArgs {
|
||||
|
||||
String checkString(int i);
|
||||
int checkInteger(int i);
|
||||
Map checkTable(int i);
|
||||
int count();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,5 @@ import net.montoyo.wd.utilities.BlockSide;
|
|||
import net.montoyo.wd.utilities.Vector3i;
|
||||
|
||||
public interface IPeripheral {
|
||||
|
||||
boolean connect(Level world, BlockPos blockPos, BlockState blockState, Vector3i screenPos, BlockSide screenSide);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,9 +11,7 @@
|
|||
//import javax.annotation.Nonnull;
|
||||
//
|
||||
//public interface IScreenQueryHandler {
|
||||
//
|
||||
// //args is an array of Doubles or Strings
|
||||
// //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);
|
||||
//
|
||||
//}
|
||||
|
|
|
|||
|
|
@ -13,10 +13,8 @@ import javax.annotation.Nonnull;
|
|||
import javax.annotation.Nullable;
|
||||
|
||||
public interface IUpgrade {
|
||||
|
||||
void onInstall(@Nonnull TileEntityScreen tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is);
|
||||
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
|
||||
String getJSName(@Nonnull ItemStack is); //modname:upgradename
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,9 +5,7 @@
|
|||
package net.montoyo.wd.core;
|
||||
|
||||
public interface IWDDCapability {
|
||||
|
||||
boolean isFirstRun();
|
||||
void clearFirstRun();
|
||||
void cloneTo(IWDDCapability dst);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import net.minecraft.network.FriendlyByteBuf;
|
|||
import net.montoyo.wd.utilities.Util;
|
||||
|
||||
public enum JSServerRequest {
|
||||
|
||||
CLEAR_REDSTONE,
|
||||
SET_REDSTONE_AT(Integer.class, Integer.class, Boolean.class);
|
||||
|
||||
|
|
@ -50,5 +49,4 @@ public enum JSServerRequest {
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ package net.montoyo.wd.core;
|
|||
import net.minecraft.server.level.ServerPlayer;
|
||||
|
||||
public class MissingPermissionException extends Exception {
|
||||
|
||||
private final int permission;
|
||||
private final ServerPlayer player;
|
||||
|
||||
|
|
@ -24,5 +23,4 @@ public class MissingPermissionException extends Exception {
|
|||
public ServerPlayer getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import java.util.Optional;
|
|||
|
||||
@Optional.Interface(iface = "net.montoyo.wd.core.IComputerArgs", modid = "opencomputers")
|
||||
public class OCArguments implements IComputerArgs {
|
||||
|
||||
//Keep this as an "Object" so that it doesn't crash if OC is absent
|
||||
private final Object args;
|
||||
|
||||
|
|
@ -41,5 +40,4 @@ public class OCArguments implements IComputerArgs {
|
|||
public int count() {
|
||||
return ((Arguments) args).count();
|
||||
}
|
||||
|
||||
} */
|
||||
|
|
|
|||
|
|
@ -5,9 +5,10 @@
|
|||
package net.montoyo.wd.core;
|
||||
|
||||
public abstract class ScreenRights {
|
||||
|
||||
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)
|
||||
public static final int CLICK = 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 ALL = 0xFF;
|
||||
public static final int DEFAULTS = CHANGE_URL | INTERACT | MANAGE_UPGRADES | MODIFY_SCREEN;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,14 +18,11 @@ import javax.annotation.Nonnull;
|
|||
import java.util.concurrent.Callable;
|
||||
|
||||
public class WDDCapability implements IWDDCapability {
|
||||
|
||||
public static class Factory implements Callable<IWDDCapability> {
|
||||
|
||||
@Override
|
||||
public IWDDCapability call() {
|
||||
return new WDDCapability();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Provider implements ICapabilitySerializable<CompoundTag> {
|
||||
|
|
@ -38,7 +35,7 @@ public class WDDCapability implements IWDDCapability {
|
|||
@NotNull
|
||||
@Override
|
||||
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
|
||||
|
|
@ -78,8 +75,7 @@ public class WDDCapability implements IWDDCapability {
|
|||
|
||||
@Override
|
||||
public void cloneTo(IWDDCapability dst) {
|
||||
if(!isFirstRun())
|
||||
if (!isFirstRun())
|
||||
dst.clearFirstRun();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,53 +18,54 @@ import java.util.HashMap;
|
|||
import java.util.function.Supplier;
|
||||
|
||||
public abstract class GuiData {
|
||||
public static GuiData read(String name, FriendlyByteBuf buf) {
|
||||
GuiType type = dataTable.get(name);
|
||||
GuiData data = type.create();
|
||||
data.deserialize(buf);
|
||||
return data;
|
||||
}
|
||||
|
||||
protected static class GuiType {
|
||||
Class<? extends GuiData> clazz;
|
||||
Supplier<GuiData> constructor;
|
||||
|
||||
public GuiType(Class<? extends GuiData> clazz, Supplier<GuiData> constructor) {
|
||||
this.clazz = clazz;
|
||||
this.constructor = constructor;
|
||||
}
|
||||
|
||||
public GuiData create() {
|
||||
return constructor.get();
|
||||
}
|
||||
}
|
||||
|
||||
private static final HashMap<String, GuiType> dataTable = new HashMap<>();
|
||||
|
||||
static {
|
||||
dataTable.put("SetURL", new GuiType(SetURLData.class, SetURLData::new));
|
||||
dataTable.put("ScreenConfig", new GuiType(ScreenConfigData.class, ScreenConfigData::new));
|
||||
dataTable.put("Keyboard", new GuiType(KeyboardData.class, KeyboardData::new));
|
||||
dataTable.put("RedstoneCtrl", new GuiType(RedstoneCtrlData.class, RedstoneCtrlData::new));
|
||||
dataTable.put("Server", new GuiType(ServerData.class, ServerData::new));
|
||||
}
|
||||
|
||||
public static Class<? extends GuiData> classOf(String name) {
|
||||
return dataTable.get(name).clazz;
|
||||
}
|
||||
|
||||
public GuiData() {
|
||||
}
|
||||
public static GuiData read(String name, FriendlyByteBuf buf) {
|
||||
GuiType type = dataTable.get(name);
|
||||
GuiData data = type.create();
|
||||
data.deserialize(buf);
|
||||
return data;
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public abstract Screen createGui(Screen old, Level world);
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public void sendTo(ServerPlayer player) {
|
||||
WDNetworkRegistry.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new S2CMessageOpenGui(this));
|
||||
}
|
||||
protected static class GuiType {
|
||||
Class<? extends GuiData> clazz;
|
||||
Supplier<GuiData> constructor;
|
||||
|
||||
public GuiType(Class<? extends GuiData> clazz, Supplier<GuiData> constructor) {
|
||||
this.clazz = clazz;
|
||||
this.constructor = constructor;
|
||||
}
|
||||
|
||||
public GuiData create() {
|
||||
return constructor.get();
|
||||
}
|
||||
}
|
||||
|
||||
private static final HashMap<String, GuiType> dataTable = new HashMap<>();
|
||||
|
||||
static {
|
||||
dataTable.put("SetURL", new GuiType(SetURLData.class, SetURLData::new));
|
||||
dataTable.put("ScreenConfig", new GuiType(ScreenConfigData.class, ScreenConfigData::new));
|
||||
dataTable.put("Keyboard", new GuiType(KeyboardData.class, KeyboardData::new));
|
||||
dataTable.put("RedstoneCtrl", new GuiType(RedstoneCtrlData.class, RedstoneCtrlData::new));
|
||||
dataTable.put("Server", new GuiType(ServerData.class, ServerData::new));
|
||||
}
|
||||
|
||||
public static Class<? extends GuiData> classOf(String name) {
|
||||
return dataTable.get(name).clazz;
|
||||
}
|
||||
|
||||
public GuiData() {
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public abstract Screen createGui(Screen old, Level world);
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public void sendTo(ServerPlayer player) {
|
||||
WDNetworkRegistry.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new S2CMessageOpenGui(this));
|
||||
}
|
||||
|
||||
public abstract void serialize(FriendlyByteBuf buf);
|
||||
|
||||
public abstract void deserialize(FriendlyByteBuf buf);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,16 +18,15 @@ import net.montoyo.wd.utilities.Log;
|
|||
import net.montoyo.wd.utilities.Vector3i;
|
||||
|
||||
public class KeyboardData extends GuiData {
|
||||
|
||||
public Vector3i pos;
|
||||
public BlockSide side;
|
||||
public int kbX;
|
||||
public int kbY;
|
||||
public int kbZ;
|
||||
|
||||
|
||||
public KeyboardData() {
|
||||
}
|
||||
|
||||
|
||||
public KeyboardData(TileEntityScreen tes, BlockSide side, BlockPos kbPos) {
|
||||
pos = new Vector3i(tes.getBlockPos());
|
||||
this.side = side;
|
||||
|
|
@ -40,7 +39,7 @@ public class KeyboardData extends GuiData {
|
|||
@Override
|
||||
public Screen createGui(Screen old, Level world) {
|
||||
BlockEntity te = world.getBlockEntity(pos.toBlock());
|
||||
if(te == null || !(te instanceof TileEntityScreen)) {
|
||||
if (te == null || !(te instanceof TileEntityScreen)) {
|
||||
Log.error("TileEntity at %s is not a screen; can't open keyboard!", pos.toString());
|
||||
return null;
|
||||
}
|
||||
|
|
@ -52,7 +51,7 @@ public class KeyboardData extends GuiData {
|
|||
public String getName() {
|
||||
return "Keyboard";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void serialize(FriendlyByteBuf buf) {
|
||||
buf.writeInt(pos.x);
|
||||
|
|
|
|||
|
|
@ -16,16 +16,15 @@ import net.montoyo.wd.net.BufferUtils;
|
|||
import net.montoyo.wd.utilities.Vector3i;
|
||||
|
||||
public class RedstoneCtrlData extends GuiData {
|
||||
|
||||
public ResourceLocation dimension;
|
||||
public Vector3i pos;
|
||||
public String risingEdgeURL;
|
||||
public String fallingEdgeURL;
|
||||
|
||||
|
||||
public RedstoneCtrlData() {
|
||||
super();
|
||||
}
|
||||
|
||||
|
||||
public RedstoneCtrlData(ResourceLocation d, BlockPos p, String r, String f) {
|
||||
dimension = d;
|
||||
pos = new Vector3i(p);
|
||||
|
|
@ -43,7 +42,7 @@ public class RedstoneCtrlData extends GuiData {
|
|||
public String getName() {
|
||||
return "RedstoneCtrl";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void serialize(FriendlyByteBuf buf) {
|
||||
buf.writeUtf(dimension.toString());
|
||||
|
|
@ -51,7 +50,7 @@ public class RedstoneCtrlData extends GuiData {
|
|||
buf.writeUtf(risingEdgeURL);
|
||||
buf.writeUtf(fallingEdgeURL);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void deserialize(FriendlyByteBuf buf) {
|
||||
dimension = new ResourceLocation(buf.readUtf());
|
||||
|
|
|
|||
|
|
@ -23,85 +23,84 @@ import net.montoyo.wd.utilities.NameUUIDPair;
|
|||
import net.montoyo.wd.utilities.Vector3i;
|
||||
|
||||
public class ScreenConfigData extends GuiData {
|
||||
|
||||
public boolean onlyUpdate;
|
||||
public Vector3i pos;
|
||||
public BlockSide side;
|
||||
public NameUUIDPair[] friends;
|
||||
public int friendRights;
|
||||
public int otherRights;
|
||||
|
||||
public ScreenConfigData() {
|
||||
}
|
||||
public boolean onlyUpdate;
|
||||
public Vector3i pos;
|
||||
public BlockSide side;
|
||||
public NameUUIDPair[] friends;
|
||||
public int friendRights;
|
||||
public int otherRights;
|
||||
|
||||
public ScreenConfigData(Vector3i pos, BlockSide side, TileEntityScreen.Screen scr) {
|
||||
this.pos = pos;
|
||||
this.side = side;
|
||||
friends = scr.friends.toArray(new NameUUIDPair[0]);
|
||||
friendRights = scr.friendRights;
|
||||
otherRights = scr.otherRights;
|
||||
onlyUpdate = false;
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@Override
|
||||
public Screen createGui(Screen old, Level world) {
|
||||
if (old != null && old instanceof GuiScreenConfig) {
|
||||
GuiScreenConfig gsc = (GuiScreenConfig) old;
|
||||
|
||||
if (gsc.isForBlock(pos.toBlock(), side)) {
|
||||
gsc.updateFriends(friends);
|
||||
gsc.updateFriendRights(friendRights);
|
||||
gsc.updateOtherRights(otherRights);
|
||||
gsc.updateMyRights();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (onlyUpdate)
|
||||
return null;
|
||||
|
||||
BlockEntity te = world.getBlockEntity(pos.toBlock());
|
||||
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";
|
||||
}
|
||||
|
||||
public ScreenConfigData updateOnly() {
|
||||
onlyUpdate = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void sendTo(PacketDistributor.TargetPoint tp) {
|
||||
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> tp), new S2CMessageOpenGui(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
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
|
||||
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();
|
||||
}
|
||||
public ScreenConfigData() {
|
||||
}
|
||||
|
||||
public ScreenConfigData(Vector3i pos, BlockSide side, TileEntityScreen.Screen scr) {
|
||||
this.pos = pos;
|
||||
this.side = side;
|
||||
friends = scr.friends.toArray(new NameUUIDPair[0]);
|
||||
friendRights = scr.friendRights;
|
||||
otherRights = scr.otherRights;
|
||||
onlyUpdate = false;
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@Override
|
||||
public Screen createGui(Screen old, Level world) {
|
||||
if (old != null && old instanceof GuiScreenConfig) {
|
||||
GuiScreenConfig gsc = (GuiScreenConfig) old;
|
||||
|
||||
if (gsc.isForBlock(pos.toBlock(), side)) {
|
||||
gsc.updateFriends(friends);
|
||||
gsc.updateFriendRights(friendRights);
|
||||
gsc.updateOtherRights(otherRights);
|
||||
gsc.updateMyRights();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (onlyUpdate)
|
||||
return null;
|
||||
|
||||
BlockEntity te = world.getBlockEntity(pos.toBlock());
|
||||
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";
|
||||
}
|
||||
|
||||
public ScreenConfigData updateOnly() {
|
||||
onlyUpdate = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void sendTo(PacketDistributor.TargetPoint tp) {
|
||||
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> tp), new S2CMessageOpenGui(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
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
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,13 +16,12 @@ import net.montoyo.wd.utilities.NameUUIDPair;
|
|||
import net.montoyo.wd.utilities.Vector3i;
|
||||
|
||||
public class ServerData extends GuiData {
|
||||
|
||||
public Vector3i pos;
|
||||
public NameUUIDPair owner;
|
||||
|
||||
|
||||
public ServerData() {
|
||||
}
|
||||
|
||||
|
||||
public ServerData(BlockPos bp, NameUUIDPair owner) {
|
||||
pos = new Vector3i(bp);
|
||||
this.owner = owner;
|
||||
|
|
@ -38,13 +37,13 @@ public class ServerData extends GuiData {
|
|||
public String getName() {
|
||||
return "Server";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void serialize(FriendlyByteBuf buf) {
|
||||
BufferUtils.writeVec3i(buf, pos);
|
||||
owner.writeTo(buf);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void deserialize(FriendlyByteBuf buf) {
|
||||
pos = BufferUtils.readVec3i(buf);
|
||||
|
|
|
|||
|
|
@ -19,16 +19,15 @@ import net.montoyo.wd.utilities.Log;
|
|||
import net.montoyo.wd.utilities.Vector3i;
|
||||
|
||||
public class SetURLData extends GuiData {
|
||||
|
||||
public Vector3i pos;
|
||||
public BlockSide side;
|
||||
public String url;
|
||||
public boolean isRemote;
|
||||
public Vector3i remoteLocation;
|
||||
|
||||
|
||||
public SetURLData() {
|
||||
}
|
||||
|
||||
|
||||
public SetURLData(Vector3i pos, BlockSide side, String url) {
|
||||
this.pos = pos;
|
||||
this.side = side;
|
||||
|
|
@ -50,7 +49,7 @@ public class SetURLData extends GuiData {
|
|||
@Override
|
||||
public Screen createGui(Screen old, Level world) {
|
||||
BlockEntity te = world.getBlockEntity(pos.toBlock());
|
||||
if(te == null || !(te instanceof TileEntityScreen)) {
|
||||
if (te == null || !(te instanceof TileEntityScreen)) {
|
||||
Log.error("TileEntity at %s is not a screen; can't open gui!", pos.toString());
|
||||
return null;
|
||||
}
|
||||
|
|
@ -62,7 +61,7 @@ public class SetURLData extends GuiData {
|
|||
public String getName() {
|
||||
return "SetURL";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void serialize(FriendlyByteBuf buf) {
|
||||
BufferUtils.writeVec3i(buf, pos);
|
||||
|
|
@ -71,7 +70,7 @@ public class SetURLData extends GuiData {
|
|||
buf.writeBoolean(isRemote);
|
||||
if (isRemote) BufferUtils.writeVec3i(buf, remoteLocation);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void deserialize(FriendlyByteBuf buf) {
|
||||
pos = BufferUtils.readVec3i(buf);
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import java.util.ArrayList;
|
|||
|
||||
@Optional.Interface(iface = "dan200.computercraft.api.peripheral.IPeripheral", modid = "computercraft")
|
||||
public class TileEntityCCInterface extends TileEntityInterfaceBase implements IPeripheral {
|
||||
|
||||
private static final String[] METHOD_NAMES;
|
||||
private static final Method[] METHODS;
|
||||
|
||||
|
|
@ -79,5 +78,4 @@ public class TileEntityCCInterface extends TileEntityInterfaceBase implements IP
|
|||
public boolean equals(@Nullable IPeripheral periph) {
|
||||
return periph == this;
|
||||
}
|
||||
|
||||
}*/
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ import java.util.ArrayList;
|
|||
import java.util.Map;
|
||||
|
||||
public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
|
||||
|
||||
public TileEntityInterfaceBase(BlockEntityType<?> arg, BlockPos arg2, BlockState arg3) {
|
||||
super(arg, arg2, arg3);
|
||||
}
|
||||
|
|
@ -406,5 +405,4 @@ public abstract class TileEntityInterfaceBase extends TileEntityPeripheralBase {
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,15 +15,14 @@ import net.minecraft.world.level.block.state.BlockState;
|
|||
import net.montoyo.wd.WebDisplays;
|
||||
import net.montoyo.wd.core.ScreenRights;
|
||||
import net.montoyo.wd.data.KeyboardData;
|
||||
import net.montoyo.wd.init.TileInit;
|
||||
import net.montoyo.wd.registry.TileRegistry;
|
||||
import net.montoyo.wd.utilities.Util;
|
||||
|
||||
public class TileEntityKeyboard extends TileEntityPeripheralBase {
|
||||
|
||||
private static final String RANDOM_CHARS = "AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn0123456789"; //Yes I have an AZERTY keyboard, u care?
|
||||
|
||||
public TileEntityKeyboard(BlockPos arg2, BlockState arg3) {
|
||||
super(TileInit.KEYBOARD.get(), arg2, arg3);
|
||||
super(TileRegistry.KEYBOARD.get(), arg2, arg3);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -72,10 +71,9 @@ public class TileEntityKeyboard extends TileEntityPeripheralBase {
|
|||
tes.type(screenSide, "t" + rnd, getBlockPos());
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,20 +25,19 @@ import javax.annotation.Nullable;
|
|||
import java.util.Objects;
|
||||
|
||||
public abstract class TileEntityPeripheralBase extends BlockEntity implements IPeripheral {
|
||||
|
||||
protected Vector3i screenPos;
|
||||
protected BlockSide screenSide;
|
||||
|
||||
public TileEntityPeripheralBase(BlockEntityType<?> arg, BlockPos arg2, BlockState arg3) {
|
||||
super(arg, arg2, arg3);
|
||||
}
|
||||
|
||||
|
||||
// TODO
|
||||
@Override
|
||||
public void load(CompoundTag tag) {
|
||||
super.load(tag);
|
||||
|
||||
if(tag.contains("WDScreen", 10)) {
|
||||
|
||||
if (tag.contains("WDScreen", 10)) {
|
||||
CompoundTag scr = tag.getCompound("WDScreen");
|
||||
screenPos = new Vector3i(scr.getInt("X"), scr.getInt("Y"), scr.getInt("Z"));
|
||||
screenSide = BlockSide.values()[scr.getByte("Side")];
|
||||
|
|
@ -47,28 +46,28 @@ public abstract class TileEntityPeripheralBase extends BlockEntity implements IP
|
|||
screenSide = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void saveAdditional(CompoundTag tag) {
|
||||
super.saveAdditional(tag);
|
||||
|
||||
if(screenPos != null && screenSide != null) {
|
||||
|
||||
if (screenPos != null && screenSide != null) {
|
||||
CompoundTag scr = new CompoundTag();
|
||||
scr.putInt("X", screenPos.x);
|
||||
scr.putInt("Y", screenPos.y);
|
||||
scr.putInt("Z", screenPos.z);
|
||||
scr.putByte("Side", (byte) screenSide.ordinal());
|
||||
|
||||
|
||||
tag.put("WDScreen", scr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// this is not used for loading from disk, so I'm marking it final
|
||||
@Override
|
||||
public final void deserializeNBT(CompoundTag tag) {
|
||||
super.deserializeNBT(tag);
|
||||
}
|
||||
|
||||
|
||||
// this is not used for writing to disk, so I'm marking it final
|
||||
@Override
|
||||
@Nonnull
|
||||
|
|
@ -79,12 +78,12 @@ public abstract class TileEntityPeripheralBase extends BlockEntity implements IP
|
|||
@Override
|
||||
public boolean connect(Level world_, BlockPos blockPos, BlockState blockState, Vector3i pos, BlockSide side) {
|
||||
BlockEntity te = world_.getBlockEntity(pos.toBlock());
|
||||
if(te == null || !(te instanceof TileEntityScreen)) {
|
||||
if (!(te instanceof TileEntityScreen)) {
|
||||
Log.error("TileEntityPeripheralBase.connect(): Tile entity at %s is not a screen!", pos.toString());
|
||||
return false;
|
||||
}
|
||||
|
||||
if(((TileEntityScreen) te).getScreen(side) == null) {
|
||||
if (((TileEntityScreen) te).getScreen(side) == null) {
|
||||
Log.error("TileEntityPeripheralBase.connect(): There is no screen at %s on side %s!", pos.toString(), side.toString());
|
||||
return false;
|
||||
}
|
||||
|
|
@ -109,11 +108,11 @@ public abstract class TileEntityPeripheralBase extends BlockEntity implements IP
|
|||
|
||||
@Nullable
|
||||
public TileEntityScreen getConnectedScreen() {
|
||||
if(screenPos == null || screenSide == null)
|
||||
if (screenPos == null || screenSide == null)
|
||||
return null;
|
||||
|
||||
BlockEntity te = level.getBlockEntity(screenPos.toBlock());
|
||||
if(te == null || !(te instanceof TileEntityScreen) || ((TileEntityScreen) te).getScreen(screenSide) == null) {
|
||||
if (!(te instanceof TileEntityScreen) || ((TileEntityScreen) te).getScreen(screenSide) == null) {
|
||||
screenPos = null;
|
||||
screenSide = null;
|
||||
setChanged();
|
||||
|
|
@ -125,11 +124,11 @@ public abstract class TileEntityPeripheralBase extends BlockEntity implements IP
|
|||
|
||||
@Nullable
|
||||
public TileEntityScreen getConnectedScreenEx() {
|
||||
if(screenPos == null || screenSide == null)
|
||||
if (screenPos == null || screenSide == null)
|
||||
return null;
|
||||
|
||||
BlockEntity te = level.getBlockEntity(screenPos.toBlock());
|
||||
if(te == null || !(te instanceof TileEntityScreen) || ((TileEntityScreen) te).getScreen(screenSide) == null)
|
||||
if (!(te instanceof TileEntityScreen) || ((TileEntityScreen) te).getScreen(screenSide) == null)
|
||||
return null;
|
||||
|
||||
return (TileEntityScreen) te;
|
||||
|
|
|
|||
|
|
@ -12,32 +12,32 @@ import net.minecraft.world.entity.player.Player;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.montoyo.wd.core.ScreenRights;
|
||||
import net.montoyo.wd.data.SetURLData;
|
||||
import net.montoyo.wd.init.TileInit;
|
||||
import net.montoyo.wd.registry.TileRegistry;
|
||||
import net.montoyo.wd.utilities.Util;
|
||||
|
||||
public class TileEntityRCtrl extends TileEntityPeripheralBase {
|
||||
public TileEntityRCtrl(BlockPos arg2, BlockState arg3) {
|
||||
super(TileInit.REMOTE_CONTROLLER.get(), arg2, arg3);
|
||||
super(TileRegistry.REMOTE_CONTROLLER.get(), arg2, arg3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResult onRightClick(Player player, InteractionHand hand) {
|
||||
if(level.isClientSide)
|
||||
if (level.isClientSide)
|
||||
return InteractionResult.SUCCESS;
|
||||
|
||||
if(!isScreenChunkLoaded()) {
|
||||
if (!isScreenChunkLoaded()) {
|
||||
Util.toast(player, "chunkUnloaded");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
TileEntityScreen tes = getConnectedScreen();
|
||||
if(tes == null) {
|
||||
if (tes == null) {
|
||||
Util.toast(player, "notLinked");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
TileEntityScreen.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");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
|
@ -45,5 +45,4 @@ public class TileEntityRCtrl extends TileEntityPeripheralBase {
|
|||
(new SetURLData(screenPos, screenSide, scr.url, getBlockPos())).sendTo((ServerPlayer) player);
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,30 +14,29 @@ import net.minecraft.world.level.block.Block;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.montoyo.wd.core.ScreenRights;
|
||||
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 java.io.IOException;
|
||||
|
||||
public class TileEntityRedCtrl extends TileEntityPeripheralBase {
|
||||
|
||||
private String risingEdgeURL = "";
|
||||
private String fallingEdgeURL = "";
|
||||
private boolean state = false;
|
||||
|
||||
public TileEntityRedCtrl(BlockPos arg2, BlockState arg3) {
|
||||
super(TileInit.REDSTONE_CONTROLLER.get(), arg2, arg3);
|
||||
super(TileRegistry.REDSTONE_CONTROLLER.get(), arg2, arg3);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void load(CompoundTag tag) {
|
||||
super.load(tag);
|
||||
|
||||
|
||||
risingEdgeURL = tag.getString("RisingEdgeURL");
|
||||
fallingEdgeURL = tag.getString("FallingEdgeURL");
|
||||
state = tag.getBoolean("Powered");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void saveAdditional(CompoundTag tag) {
|
||||
super.saveAdditional(tag);
|
||||
|
|
@ -45,25 +44,25 @@ public class TileEntityRedCtrl extends TileEntityPeripheralBase {
|
|||
tag.putString("FallingEdgeURL", fallingEdgeURL);
|
||||
tag.putBoolean("Powered", state);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public InteractionResult onRightClick(Player player, InteractionHand hand) {
|
||||
if(level.isClientSide)
|
||||
if (level.isClientSide)
|
||||
return InteractionResult.SUCCESS;
|
||||
|
||||
if(!isScreenChunkLoaded()) {
|
||||
if (!isScreenChunkLoaded()) {
|
||||
Util.toast(player, "chunkUnloaded");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
TileEntityScreen tes = getConnectedScreen();
|
||||
if(tes == null) {
|
||||
if (tes == null) {
|
||||
Util.toast(player, "notLinked");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
TileEntityScreen.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");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
|
@ -76,10 +75,10 @@ public class TileEntityRedCtrl extends TileEntityPeripheralBase {
|
|||
public void onNeighborChange(Block neighborType, BlockPos neighborPos) {
|
||||
boolean hasPower = (level.hasNeighborSignal(getBlockPos()) || level.hasNeighborSignal(getBlockPos().above())); //Same as dispenser
|
||||
|
||||
if(hasPower != state) {
|
||||
if (hasPower != state) {
|
||||
state = hasPower;
|
||||
|
||||
if(state) //Rising edge
|
||||
if (state) //Rising edge
|
||||
changeURL(risingEdgeURL);
|
||||
else //Falling edge
|
||||
changeURL(fallingEdgeURL);
|
||||
|
|
@ -93,10 +92,10 @@ public class TileEntityRedCtrl extends TileEntityPeripheralBase {
|
|||
}
|
||||
|
||||
private void changeURL(String url) {
|
||||
if(level.isClientSide || url.isEmpty())
|
||||
if (level.isClientSide || url.isEmpty())
|
||||
return;
|
||||
|
||||
if(isScreenChunkLoaded()) {
|
||||
if (isScreenChunkLoaded()) {
|
||||
TileEntityScreen tes = getConnectedScreen();
|
||||
|
||||
if (tes != null)
|
||||
|
|
|
|||
|
|
@ -31,27 +31,22 @@ import net.montoyo.wd.config.CommonConfig;
|
|||
import net.montoyo.wd.controls.builtin.ClickControl;
|
||||
import net.montoyo.wd.core.DefaultUpgrade;
|
||||
import net.montoyo.wd.core.IUpgrade;
|
||||
import net.montoyo.wd.core.JSServerRequest;
|
||||
import net.montoyo.wd.core.ScreenRights;
|
||||
import net.montoyo.wd.data.ScreenConfigData;
|
||||
import net.montoyo.wd.init.BlockInit;
|
||||
import net.montoyo.wd.init.ItemInit;
|
||||
import net.montoyo.wd.init.TileInit;
|
||||
import net.montoyo.wd.registry.BlockRegistry;
|
||||
import net.montoyo.wd.registry.ItemRegistry;
|
||||
import net.montoyo.wd.registry.TileRegistry;
|
||||
import net.montoyo.wd.miniserv.SyncPlugin;
|
||||
import net.montoyo.wd.net.WDNetworkRegistry;
|
||||
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.utilities.*;
|
||||
import org.cef.browser.CefBrowser;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Consumer;
|
||||
|
|
@ -59,9 +54,8 @@ import java.util.function.Consumer;
|
|||
import static net.montoyo.wd.block.BlockPeripheral.point;
|
||||
|
||||
public class TileEntityScreen extends BlockEntity {
|
||||
|
||||
public TileEntityScreen(BlockPos arg2, BlockState arg3) {
|
||||
super(TileInit.SCREEN_BLOCK_ENTITY.get(), arg2, arg3);
|
||||
super(TileRegistry.SCREEN_BLOCK_ENTITY.get(), arg2, arg3);
|
||||
}
|
||||
|
||||
public static class Screen {
|
||||
|
|
@ -277,6 +271,7 @@ public class TileEntityScreen extends BlockEntity {
|
|||
scr.browser = null;
|
||||
}
|
||||
}
|
||||
screens.clear();
|
||||
|
||||
loaded = false;
|
||||
}
|
||||
|
|
@ -289,6 +284,14 @@ public class TileEntityScreen extends BlockEntity {
|
|||
if (list.isEmpty())
|
||||
return;
|
||||
|
||||
// very important to close these
|
||||
for (Screen screen : screens) {
|
||||
if (screen.browser != null) {
|
||||
screen.browser.close(true);
|
||||
screen.browser = null;
|
||||
}
|
||||
}
|
||||
|
||||
screens.clear();
|
||||
for (int i = 0; i < list.size(); i++)
|
||||
screens.add(Screen.deserialize(list.getCompound(i)));
|
||||
|
|
@ -403,17 +406,18 @@ public class TileEntityScreen extends BlockEntity {
|
|||
}
|
||||
|
||||
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();
|
||||
|
||||
if (!level.isClientSide)
|
||||
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 {
|
||||
System.out.println("URL received: " + url);
|
||||
if (!(WebDisplays.PROXY instanceof ClientProxy)) {
|
||||
|
|
@ -450,6 +454,7 @@ public class TileEntityScreen extends BlockEntity {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: is there a reason this is unused?
|
||||
public void removeScreen(BlockSide side) {
|
||||
int idx = -1;
|
||||
for (int i = 0; i < screens.size(); i++) {
|
||||
|
|
@ -476,7 +481,7 @@ public class TileEntityScreen extends BlockEntity {
|
|||
|
||||
if (!level.isClientSide) {
|
||||
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(BlockScreen.hasTE, false));
|
||||
else
|
||||
setChanged();
|
||||
}
|
||||
|
|
@ -512,7 +517,7 @@ public class TileEntityScreen extends BlockEntity {
|
|||
|
||||
private static Player getLaserUser(Screen scr) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -544,13 +549,6 @@ public class TileEntityScreen extends BlockEntity {
|
|||
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) {
|
||||
if (button > 1) return; // buttons above 1 crash the game
|
||||
|
||||
|
|
@ -791,6 +789,7 @@ public class TileEntityScreen extends BlockEntity {
|
|||
public void updateClientSideURL(CefBrowser target, String url) {
|
||||
for (Screen scr : screens) {
|
||||
if (scr.browser == target) {
|
||||
// TODO: what? lol
|
||||
String webUrl;
|
||||
try {
|
||||
webUrl = TileEntityScreen.url(url);
|
||||
|
|
@ -1255,5 +1254,4 @@ public class TileEntityScreen extends BlockEntity {
|
|||
//
|
||||
// return oldState.getValue(BlockScreen.hasTE) != newState.getValue(BlockScreen.hasTE);
|
||||
// }
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,16 +12,15 @@ import net.minecraft.world.level.block.entity.BlockEntity;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.montoyo.wd.WebDisplays;
|
||||
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.Util;
|
||||
|
||||
public class TileEntityServer extends BlockEntity {
|
||||
|
||||
private NameUUIDPair owner;
|
||||
|
||||
public TileEntityServer(BlockPos arg2, BlockState arg3) {
|
||||
super(TileInit.SERVER.get(), arg2, arg3);
|
||||
super(TileRegistry.SERVER.get(), arg2, arg3);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -29,7 +28,7 @@ public class TileEntityServer extends BlockEntity {
|
|||
super.load(tag);
|
||||
owner = Util.readOwnerFromNBT(tag);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void saveAdditional(CompoundTag tag) {
|
||||
super.saveAdditional(tag);
|
||||
|
|
@ -42,13 +41,12 @@ public class TileEntityServer extends BlockEntity {
|
|||
}
|
||||
|
||||
public void onPlayerRightClick(Player ply) {
|
||||
if(level.isClientSide)
|
||||
if (level.isClientSide)
|
||||
return;
|
||||
|
||||
if( WebDisplays.INSTANCE.miniservPort == 0)
|
||||
if (WebDisplays.INSTANCE.miniservPort == 0)
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import net.montoyo.wd.core.CraftComponent;
|
|||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ItemCraftComponent extends ItemMulti implements WDItem {
|
||||
|
||||
public ItemCraftComponent(Properties properties) {
|
||||
super(CraftComponent.class, properties
|
||||
// .tab(WebDisplays.CREATIVE_TAB)
|
||||
|
|
|
|||
|
|
@ -11,14 +11,13 @@ import net.minecraft.world.item.ItemStack;
|
|||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
import net.minecraft.world.phys.HitResult;
|
||||
import net.montoyo.wd.WebDisplays;
|
||||
import net.montoyo.wd.block.BlockScreen;
|
||||
import net.montoyo.wd.client.ClientProxy;
|
||||
import net.montoyo.wd.config.ClientConfig;
|
||||
import net.montoyo.wd.controls.builtin.ClickControl;
|
||||
import net.montoyo.wd.core.DefaultUpgrade;
|
||||
import net.montoyo.wd.entity.TileEntityScreen;
|
||||
import net.montoyo.wd.init.BlockInit;
|
||||
import net.montoyo.wd.registry.BlockRegistry;
|
||||
import net.montoyo.wd.net.WDNetworkRegistry;
|
||||
import net.montoyo.wd.net.server_bound.C2SMessageScreenCtrl;
|
||||
import net.montoyo.wd.utilities.BlockSide;
|
||||
|
|
@ -53,7 +52,7 @@ public class ItemLaserPointer extends Item implements WDItem {
|
|||
|
||||
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());
|
||||
BlockSide side = BlockSide.values()[result.getDirection().ordinal()];
|
||||
|
||||
|
|
|
|||
|
|
@ -27,33 +27,32 @@ import javax.annotation.Nonnull;
|
|||
import javax.annotation.Nullable;
|
||||
|
||||
public class ItemLinker extends Item implements WDItem {
|
||||
|
||||
public ItemLinker(Properties properties) {
|
||||
super(properties
|
||||
.stacksTo(1)
|
||||
.stacksTo(1)
|
||||
// .tab(WebDisplays.CREATIVE_TAB)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResult useOn(UseOnContext context) {
|
||||
if(context.getLevel().isClientSide())
|
||||
if (context.getLevel().isClientSide())
|
||||
return InteractionResult.SUCCESS;
|
||||
|
||||
ItemStack stack = context.getPlayer().getItemInHand(context.getHand());
|
||||
CompoundTag tag = stack.getTag();
|
||||
|
||||
if(tag != null) {
|
||||
if(tag.contains("ScreenX") && tag.contains("ScreenY") && tag.contains("ScreenZ") && tag.contains("ScreenSide")) {
|
||||
if (tag != null) {
|
||||
if (tag.contains("ScreenX") && tag.contains("ScreenY") && tag.contains("ScreenZ") && tag.contains("ScreenSide")) {
|
||||
BlockState state = context.getLevel().getBlockState(context.getClickedPos());
|
||||
IPeripheral target;
|
||||
|
||||
if(state.getBlock() instanceof IPeripheral)
|
||||
if (state.getBlock() instanceof IPeripheral)
|
||||
target = (IPeripheral) state.getBlock();
|
||||
else {
|
||||
BlockEntity te = context.getLevel().getBlockEntity(context.getClickedPos());
|
||||
if(te == null || !(te instanceof IPeripheral)) {
|
||||
if(context.getPlayer().isShiftKeyDown()) {
|
||||
if (te == null || !(te instanceof IPeripheral)) {
|
||||
if (context.getPlayer().isShiftKeyDown()) {
|
||||
Util.toast(context.getPlayer(), ChatFormatting.GOLD, "linkAbort");
|
||||
stack.setTag(null);
|
||||
} 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"));
|
||||
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");
|
||||
|
||||
if(context.getPlayer() instanceof ServerPlayer)
|
||||
if (context.getPlayer() instanceof ServerPlayer)
|
||||
WebDisplays.INSTANCE.criterionLinkPeripheral.trigger(((ServerPlayer) context.getPlayer()).getAdvancements());
|
||||
} else
|
||||
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 BlockScreen)) {
|
||||
Util.toast(context.getPlayer(), "notAScreen");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
|
@ -91,15 +90,15 @@ public class ItemLinker extends Item implements WDItem {
|
|||
Multiblock.findOrigin(context.getLevel(), pos, side, null);
|
||||
|
||||
BlockEntity te = context.getLevel().getBlockEntity(pos.toBlock());
|
||||
if(te == null || !(te instanceof TileEntityScreen)) {
|
||||
if (te == null || !(te instanceof TileEntityScreen)) {
|
||||
Util.toast(context.getPlayer(), "turnOn");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
TileEntityScreen.Screen scr = ((TileEntityScreen) te).getScreen(side);
|
||||
if(scr == null)
|
||||
if (scr == null)
|
||||
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");
|
||||
else {
|
||||
tag = new CompoundTag();
|
||||
|
|
@ -120,5 +119,4 @@ public class ItemLinker extends Item implements WDItem {
|
|||
public String getWikiName(@Nonnull ItemStack is) {
|
||||
return is.getItem().getName(is).getString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,90 +28,88 @@ import javax.annotation.Nullable;
|
|||
import java.util.UUID;
|
||||
|
||||
public class ItemMinePad2 extends Item implements WDItem {
|
||||
|
||||
public ItemMinePad2(Properties properties) {
|
||||
super(properties
|
||||
.stacksTo(1)
|
||||
.defaultDurability(0)
|
||||
public ItemMinePad2(Properties properties) {
|
||||
super(properties
|
||||
.stacksTo(1)
|
||||
.defaultDurability(0)
|
||||
// .tab(WebDisplays.CREATIVE_TAB)
|
||||
);
|
||||
}
|
||||
|
||||
private static String getURL(ItemStack is) {
|
||||
if (is.getTag() == null || !is.getTag().contains("PadURL"))
|
||||
return CommonConfig.Browser.homepage;
|
||||
else
|
||||
return is.getTag().getString("PadURL");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public InteractionResultHolder<ItemStack> use(Level world, Player ply, @Nonnull InteractionHand hand) {
|
||||
ItemStack is = ply.getItemInHand(hand);
|
||||
boolean ok;
|
||||
|
||||
if (ply.isShiftKeyDown()) {
|
||||
if (world.isClientSide)
|
||||
WebDisplays.PROXY.displaySetPadURLGui(is, getURL(is));
|
||||
|
||||
ok = true;
|
||||
} else if (is.getTag() != null && is.getTag().contains("PadID")) {
|
||||
if (world.isClientSide)
|
||||
WebDisplays.PROXY.openMinePadGui(is.getTag().getUUID("PadID"));
|
||||
|
||||
ok = true;
|
||||
} else {
|
||||
UUID uuid = UUID.randomUUID();
|
||||
String url = getURL(is);
|
||||
WDNetworkRegistry.INSTANCE.sendToServer(new C2SMessageMinepadUrl(uuid, url));
|
||||
is.getOrCreateTag().putUUID("PadID", uuid);
|
||||
|
||||
ok = true;
|
||||
}
|
||||
|
||||
return new InteractionResultHolder<>(ok ? InteractionResult.SUCCESS : InteractionResult.PASS, is);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onEntityItemUpdate(ItemStack stack, ItemEntity ent) {
|
||||
if (ent.onGround() && !ent.level().isClientSide) {
|
||||
CompoundTag tag = ent.getItem().getTag();
|
||||
|
||||
if (tag != null && tag.contains("ThrowHeight")) {
|
||||
//Delete it, it touched the ground
|
||||
double height = tag.getDouble("ThrowHeight");
|
||||
UUID thrower = null;
|
||||
|
||||
if (tag.contains("ThrowerMSB") && tag.contains("ThrowerLSB"))
|
||||
thrower = new UUID(tag.getLong("ThrowerMSB"), tag.getLong("ThrowerLSB"));
|
||||
|
||||
if (tag.contains("PadID") || tag.contains("PadURL")) {
|
||||
tag.remove("ThrowerMSB");
|
||||
tag.remove("ThrowerLSB");
|
||||
tag.remove("ThrowHeight");
|
||||
} else //We can delete the whole tag
|
||||
ent.getItem().setTag(null);
|
||||
|
||||
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().addFreshEntity(new ItemEntity(ent.level(), ent.getBlockX(), ent.getBlockY(), ent.getBlockZ(), CraftComponent.EXTCARD.makeItemStack()));
|
||||
ent.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION);
|
||||
|
||||
Player ply = ent.level().getPlayerByUUID(thrower);
|
||||
if (ply != null && ply instanceof ServerPlayer)
|
||||
WebDisplays.INSTANCE.criterionPadBreak.trigger(((ServerPlayer) ply).getAdvancements());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getWikiName(@Nonnull ItemStack is) {
|
||||
return is.getItem().getName(is).getString();
|
||||
}
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
private static String getURL(ItemStack is) {
|
||||
if (is.getTag() == null || !is.getTag().contains("PadURL"))
|
||||
return CommonConfig.Browser.homepage;
|
||||
else
|
||||
return is.getTag().getString("PadURL");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public InteractionResultHolder<ItemStack> use(Level world, Player ply, @Nonnull InteractionHand hand) {
|
||||
ItemStack is = ply.getItemInHand(hand);
|
||||
boolean ok;
|
||||
|
||||
if (ply.isShiftKeyDown()) {
|
||||
if (world.isClientSide)
|
||||
WebDisplays.PROXY.displaySetPadURLGui(is, getURL(is));
|
||||
|
||||
ok = true;
|
||||
} else if (is.getTag() != null && is.getTag().contains("PadID")) {
|
||||
if (world.isClientSide)
|
||||
WebDisplays.PROXY.openMinePadGui(is.getTag().getUUID("PadID"));
|
||||
|
||||
ok = true;
|
||||
} else {
|
||||
UUID uuid = UUID.randomUUID();
|
||||
String url = getURL(is);
|
||||
WDNetworkRegistry.INSTANCE.sendToServer(new C2SMessageMinepadUrl(uuid, url));
|
||||
is.getOrCreateTag().putUUID("PadID", uuid);
|
||||
|
||||
ok = true;
|
||||
}
|
||||
|
||||
return new InteractionResultHolder<>(ok ? InteractionResult.SUCCESS : InteractionResult.PASS, is);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onEntityItemUpdate(ItemStack stack, ItemEntity ent) {
|
||||
if (ent.onGround() && !ent.level().isClientSide) {
|
||||
CompoundTag tag = ent.getItem().getTag();
|
||||
|
||||
if (tag != null && tag.contains("ThrowHeight")) {
|
||||
//Delete it, it touched the ground
|
||||
double height = tag.getDouble("ThrowHeight");
|
||||
UUID thrower = null;
|
||||
|
||||
if (tag.contains("ThrowerMSB") && tag.contains("ThrowerLSB"))
|
||||
thrower = new UUID(tag.getLong("ThrowerMSB"), tag.getLong("ThrowerLSB"));
|
||||
|
||||
if (tag.contains("PadID") || tag.contains("PadURL")) {
|
||||
tag.remove("ThrowerMSB");
|
||||
tag.remove("ThrowerLSB");
|
||||
tag.remove("ThrowHeight");
|
||||
} else //We can delete the whole tag
|
||||
ent.getItem().setTag(null);
|
||||
|
||||
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().addFreshEntity(new ItemEntity(ent.level(), ent.getBlockX(), ent.getBlockY(), ent.getBlockZ(), CraftComponent.EXTCARD.makeItemStack()));
|
||||
ent.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION);
|
||||
|
||||
Player ply = ent.level().getPlayerByUUID(thrower);
|
||||
if (ply != null && ply instanceof ServerPlayer)
|
||||
WebDisplays.INSTANCE.criterionPadBreak.trigger(((ServerPlayer) ply).getAdvancements());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getWikiName(@Nonnull ItemStack is) {
|
||||
return is.getItem().getName(is).getString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import net.minecraft.world.item.Item;
|
|||
import java.util.BitSet;
|
||||
|
||||
public class ItemMulti extends Item {
|
||||
|
||||
protected final Enum[] values;
|
||||
protected final BitSet creativeTabItems;
|
||||
|
||||
|
|
|
|||
|
|
@ -23,45 +23,44 @@ import javax.annotation.Nonnull;
|
|||
import javax.annotation.Nullable;
|
||||
|
||||
public class ItemOwnershipThief extends Item implements WDItem {
|
||||
|
||||
public ItemOwnershipThief(Properties properties) {
|
||||
super(properties
|
||||
.stacksTo(1)
|
||||
.stacksTo(1)
|
||||
// .tab(WebDisplays.CREATIVE_TAB)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull InteractionResult useOn(UseOnContext context) {
|
||||
if(context.getPlayer().isShiftKeyDown())
|
||||
if (context.getPlayer().isShiftKeyDown())
|
||||
return InteractionResult.PASS;
|
||||
|
||||
if(context.getLevel().isClientSide)
|
||||
if (context.getLevel().isClientSide)
|
||||
return InteractionResult.SUCCESS;
|
||||
|
||||
if(CommonConfig.disableOwnershipThief) {
|
||||
if (CommonConfig.disableOwnershipThief) {
|
||||
Util.toast(context.getPlayer(), "otDisabled");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
ItemStack stack = context.getPlayer().getItemInHand(context.getHand());
|
||||
if(stack.hasTag()) {
|
||||
if (stack.hasTag()) {
|
||||
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"));
|
||||
BlockSide side = BlockSide.values()[tag.getByte("Side")];
|
||||
|
||||
if(!(context.getLevel().getBlockState(bp).getBlock() instanceof BlockScreen))
|
||||
if (!(context.getLevel().getBlockState(bp).getBlock() instanceof BlockScreen))
|
||||
return InteractionResult.SUCCESS;
|
||||
|
||||
BlockEntity te = context.getLevel().getBlockEntity(bp);
|
||||
if(te == null || !(te instanceof TileEntityScreen))
|
||||
if (te == null || !(te instanceof TileEntityScreen))
|
||||
return InteractionResult.SUCCESS;
|
||||
|
||||
TileEntityScreen tes = (TileEntityScreen) te;
|
||||
TileEntityScreen.Screen scr = tes.getScreen(side);
|
||||
if(scr == null)
|
||||
if (scr == null)
|
||||
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());
|
||||
|
|
@ -72,7 +71,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 BlockScreen))
|
||||
return InteractionResult.SUCCESS;
|
||||
|
||||
Vector3i pos = new Vector3i(context.getClickedPos());
|
||||
|
|
@ -80,12 +79,12 @@ public class ItemOwnershipThief extends Item implements WDItem {
|
|||
Multiblock.findOrigin(context.getLevel(), pos, side, null);
|
||||
|
||||
BlockEntity te = context.getLevel().getBlockEntity(pos.toBlock());
|
||||
if(te == null || !(te instanceof TileEntityScreen)) {
|
||||
if (te == null || !(te instanceof TileEntityScreen)) {
|
||||
Util.toast(context.getPlayer(), "turnOn");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
if(((TileEntityScreen) te).getScreen(side) == null)
|
||||
if (((TileEntityScreen) te).getScreen(side) == null)
|
||||
Util.toast(context.getPlayer(), "turnOn");
|
||||
else {
|
||||
CompoundTag tag = new CompoundTag();
|
||||
|
|
@ -107,5 +106,4 @@ public class ItemOwnershipThief extends Item implements WDItem {
|
|||
public String getWikiName(@Nonnull ItemStack is) {
|
||||
return "Ownership_Thief";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,20 +21,19 @@ import net.montoyo.wd.utilities.Vector3i;
|
|||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ItemScreenConfigurator extends Item implements WDItem {
|
||||
|
||||
public ItemScreenConfigurator(Properties properties) {
|
||||
super(properties
|
||||
.stacksTo(1)
|
||||
.stacksTo(1)
|
||||
// .tab(WebDisplays.CREATIVE_TAB)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
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 BlockScreen))
|
||||
return InteractionResult.PASS;
|
||||
|
||||
if(context.getLevel().isClientSide)
|
||||
if (context.getLevel().isClientSide)
|
||||
return InteractionResult.SUCCESS;
|
||||
|
||||
Vector3i origin = new Vector3i(context.getClickedPos());
|
||||
|
|
@ -43,13 +42,13 @@ public class ItemScreenConfigurator extends Item implements WDItem {
|
|||
Multiblock.findOrigin(context.getLevel(), origin, side, null);
|
||||
BlockEntity te = context.getLevel().getBlockEntity(origin.toBlock());
|
||||
|
||||
if(te == null || !(te instanceof TileEntityScreen)) {
|
||||
if (te == null || !(te instanceof TileEntityScreen)) {
|
||||
Util.toast(context.getPlayer(), "turnOn");
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
TileEntityScreen.Screen scr = ((TileEntityScreen) te).getScreen(side);
|
||||
if(scr == null)
|
||||
if (scr == null)
|
||||
Util.toast(context.getPlayer(), "turnOn");
|
||||
else
|
||||
(new ScreenConfigData(origin, side, scr)).sendTo((ServerPlayer) context.getPlayer());
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import javax.annotation.Nullable;
|
|||
|
||||
public class ItemUpgrade extends ItemMulti implements IUpgrade, WDItem {
|
||||
public final DefaultUpgrade type;
|
||||
|
||||
|
||||
public ItemUpgrade(DefaultUpgrade type) {
|
||||
super(DefaultUpgrade.class, new Properties()/*.tab(WebDisplays.CREATIVE_TAB)*/);
|
||||
this.type = type;
|
||||
|
|
@ -31,7 +31,7 @@ public class ItemUpgrade extends ItemMulti implements IUpgrade, WDItem {
|
|||
|
||||
@Override
|
||||
public boolean onRemove(@Nonnull TileEntityScreen tes, @Nonnull BlockSide screenSide, @Nullable Player player, @Nonnull ItemStack is) {
|
||||
if(DefaultUpgrade.LASERMOUSE.matchesLaserMouse(is))
|
||||
if (DefaultUpgrade.LASERMOUSE.matchesLaserMouse(is))
|
||||
tes.clearLaserUser(screenSide);
|
||||
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -14,10 +14,9 @@ import javax.annotation.Nullable;
|
|||
import java.util.List;
|
||||
|
||||
public interface WDItem {
|
||||
|
||||
static void addInformation(@Nullable List<String> tt) {
|
||||
if(tt != null && WebDisplays.PROXY.isShiftDown())
|
||||
tt.add("" + ChatFormatting.GRAY + I18n.get("item.webdisplays.wiki"));
|
||||
if (tt != null && WebDisplays.PROXY.isShiftDown())
|
||||
tt.add(ChatFormatting.GRAY + I18n.get("item.webdisplays.wiki"));
|
||||
}
|
||||
|
||||
String getWikiName(@Nonnull ItemStack is);
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import net.minecraft.client.Minecraft;
|
|||
import net.minecraft.client.MouseHandler;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
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 org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
|
@ -15,21 +15,23 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||
|
||||
@Mixin(MouseHandler.class)
|
||||
public class MouseHandlerMixin {
|
||||
@Shadow @Final private Minecraft minecraft;
|
||||
|
||||
@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) {
|
||||
boolean flag = p_91533_ == 1;
|
||||
|
||||
if (Minecraft.getInstance().screen == null) {
|
||||
if (
|
||||
minecraft.player != null && minecraft.level != null &&
|
||||
minecraft.player.getItemInHand(InteractionHand.MAIN_HAND).getItem().equals(ItemInit.LASER_POINTER.get()) &&
|
||||
(minecraft.hitResult == null || minecraft.hitResult.getType() == HitResult.Type.BLOCK || minecraft.hitResult.getType() == HitResult.Type.MISS)
|
||||
) {
|
||||
ItemLaserPointer.press(flag, p_91532_);
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
@Shadow
|
||||
@Final
|
||||
private Minecraft minecraft;
|
||||
|
||||
@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) {
|
||||
boolean flag = p_91533_ == 1;
|
||||
|
||||
if (Minecraft.getInstance().screen == null) {
|
||||
if (
|
||||
minecraft.player != null && minecraft.level != null &&
|
||||
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)
|
||||
) {
|
||||
ItemLaserPointer.press(flag, p_91532_);
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,19 +14,19 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||
|
||||
@Mixin(Gui.class)
|
||||
public class OverlayMixin {
|
||||
@Shadow
|
||||
@Final
|
||||
protected Minecraft minecraft;
|
||||
|
||||
@Shadow
|
||||
protected int screenWidth;
|
||||
|
||||
@Shadow
|
||||
protected int screenHeight;
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "renderCrosshair", cancellable = true)
|
||||
public void preDrawCrosshair(GuiGraphics pGuiGraphics, CallbackInfo ci) {
|
||||
@Shadow
|
||||
@Final
|
||||
protected Minecraft minecraft;
|
||||
|
||||
@Shadow
|
||||
protected int screenWidth;
|
||||
|
||||
@Shadow
|
||||
protected int screenHeight;
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "renderCrosshair", cancellable = true)
|
||||
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, 0, pGuiGraphics, ci);
|
||||
}
|
||||
ClientProxy.renderCrosshair(minecraft.options, screenWidth, screenHeight, 0, pGuiGraphics, ci);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package net.montoyo.wd.init;
|
||||
package net.montoyo.wd.registry;
|
||||
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
|
|
@ -13,20 +13,19 @@ import net.montoyo.wd.block.BlockPeripheral;
|
|||
import net.montoyo.wd.block.BlockScreen;
|
||||
import net.montoyo.wd.core.DefaultPeripheral;
|
||||
|
||||
public class BlockInit {
|
||||
|
||||
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<BlockScreen> blockScreen = BLOCKS.register("screen", () -> new BlockScreen(BlockBehaviour.Properties.copy(Blocks.STONE)));
|
||||
public static final RegistryObject<BlockScreen> SCREEN_BLOCk = 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<BlockKeyboardLeft> KEYBOARD_BLOCK = BlockRegistry.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));
|
||||
public static final RegistryObject<BlockPeripheral> REDSTONE_CONTROL_BLOCK = BlockRegistry.BLOCKS.register("redctrl", () -> new BlockPeripheral(DefaultPeripheral.REDSTONE_CONTROLLER));
|
||||
public static final RegistryObject<BlockPeripheral> REMOTE_CONTROLLER_BLOCK = BlockRegistry.BLOCKS.register("rctrl", () -> new BlockPeripheral(DefaultPeripheral.REMOTE_CONTROLLER));
|
||||
public static final RegistryObject<BlockPeripheral> SERVER_BLOCK = BlockRegistry.BLOCKS.register("server", () -> new BlockPeripheral(DefaultPeripheral.SERVER));
|
||||
}
|
||||
|
|
@ -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.Item;
|
||||
|
|
@ -6,7 +6,6 @@ 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.WebDisplays;
|
||||
import net.montoyo.wd.block.item.KeyboardItem;
|
||||
import net.montoyo.wd.core.CraftComponent;
|
||||
import net.montoyo.wd.core.DefaultUpgrade;
|
||||
|
|
@ -15,11 +14,11 @@ import net.montoyo.wd.item.*;
|
|||
import java.util.Locale;
|
||||
|
||||
@SuppressWarnings({"unchecked", "unused"})
|
||||
public class ItemInit{
|
||||
public class ItemRegistry {
|
||||
public static void init(IEventBus bus) {
|
||||
ITEMS.register(bus);
|
||||
}
|
||||
|
||||
|
||||
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, "webdisplays");
|
||||
|
||||
protected static final RegistryObject<Item>[] COMP_CRAFT_ITEMS = new RegistryObject[CraftComponent.values().length];
|
||||
|
|
@ -31,13 +30,13 @@ public class ItemInit{
|
|||
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()));
|
||||
|
||||
static {
|
||||
static {
|
||||
DefaultUpgrade[] defaultUpgrades = DefaultUpgrade.values();
|
||||
for (int i = 0; i < defaultUpgrades.length; i++) {
|
||||
DefaultUpgrade upgrade = defaultUpgrades[i];
|
||||
UPGRADE_ITEMS[i] = ITEMS.register("upgrade_" + upgrade.name().toLowerCase(Locale.ROOT), () -> new ItemUpgrade(upgrade));
|
||||
}
|
||||
|
||||
|
||||
CraftComponent[] components = CraftComponent.values();
|
||||
for (int i = 0; i < components.length; i++) {
|
||||
CraftComponent cc = components[i];
|
||||
|
|
@ -45,29 +44,29 @@ 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(BlockRegistry.KEYBOARD_BLOCK.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(BlockRegistry.REMOTE_CONTROLLER_BLOCK.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 final RegistryObject<Item> KEYBOARD = ITEMS.register("keyboard", () -> new KeyboardItem(BlockInit.blockKeyBoard.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> REMOTE_CONTROLLER = ITEMS.register("rctrl", () -> new BlockItem(BlockInit.blockRControl.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 RegistryObject<Item> getComputerCraftItem(int index) {
|
||||
return COMP_CRAFT_ITEMS[index];
|
||||
}
|
||||
|
||||
|
||||
public static RegistryObject<Item> getUpgradeItem(int index) {
|
||||
return UPGRADE_ITEMS[index];
|
||||
}
|
||||
|
||||
|
||||
public static int countCompCraftItems() {
|
||||
return COMP_CRAFT_ITEMS.length;
|
||||
}
|
||||
|
||||
|
||||
public static int countUpgrades() {
|
||||
return UPGRADE_ITEMS.length;
|
||||
}
|
||||
|
||||
|
||||
public static boolean isCompCraftItem(Item item) {
|
||||
for (RegistryObject<Item> itemRegistryObject : COMP_CRAFT_ITEMS)
|
||||
if (item == itemRegistryObject.get())
|
||||
|
|
@ -1,37 +1,32 @@
|
|||
package net.montoyo.wd.init;
|
||||
package net.montoyo.wd.registry;
|
||||
|
||||
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 class TileRegistry {
|
||||
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));
|
||||
.of(TileEntityScreen::new, BlockRegistry.SCREEN_BLOCk.get()).build(null));
|
||||
|
||||
public static final RegistryObject<BlockEntityType<?>> KEYBOARD = TILE_TYPES.register("kb_left", () -> BlockEntityType.Builder
|
||||
.of(TileEntityKeyboard::new, BlockInit.blockKeyBoard.get()).build(null));
|
||||
.of(TileEntityKeyboard::new, BlockRegistry.KEYBOARD_BLOCK.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<?>> REMOTE_CONTROLLER = TILE_TYPES.register("rctrl",
|
||||
() -> BlockEntityType.Builder.of(TileEntityRCtrl::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(TileEntityRedCtrl::new, BlockInit.blockRedControl.get()).build(null));
|
||||
() -> BlockEntityType.Builder.of(TileEntityRedCtrl::new, BlockRegistry.REDSTONE_CONTROL_BLOCK.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 final RegistryObject<BlockEntityType<?>> SERVER = TILE_TYPES.register("server",
|
||||
() -> BlockEntityType.Builder.of(TileEntityServer::new, BlockRegistry.SERVER_BLOCK.get()).build(null));
|
||||
|
||||
public static void init(IEventBus bus) {
|
||||
TILE_TYPES.register(bus);
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
* Copyright (C) 2018 BARBOTIN Nicolas
|
||||
*/
|
||||
|
||||
package net.montoyo.wd.init;
|
||||
package net.montoyo.wd.registry;
|
||||
|
||||
import net.minecraft.core.registries.Registries;
|
||||
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.registries.DeferredRegister;
|
||||
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 RegistryObject<CreativeModeTab> EXAMPLE_TAB = TABS.register("main", () -> CreativeModeTab.builder()
|
||||
// Set name of tab to display
|
||||
.title(Component.translatable("itemGroup.webdisplays"))
|
||||
// Set icon of creative tab
|
||||
.icon(() -> new ItemStack(ItemInit.SCREEN.get()))
|
||||
.icon(() -> new ItemStack(ItemRegistry.SCREEN.get()))
|
||||
// Add default items to tab
|
||||
.displayItems((params, output) -> {
|
||||
// core items
|
||||
output.accept(ItemInit.SCREEN.get());
|
||||
output.accept(ItemInit.KEYBOARD.get());
|
||||
output.accept(ItemInit.LINKER.get());
|
||||
output.accept(ItemRegistry.SCREEN.get());
|
||||
output.accept(ItemRegistry.KEYBOARD.get());
|
||||
output.accept(ItemRegistry.LINKER.get());
|
||||
// remote control
|
||||
output.accept(ItemInit.REMOTE_CONTROLLER.get());
|
||||
output.accept(ItemRegistry.REMOTE_CONTROLLER.get());
|
||||
// redstone stuff
|
||||
output.accept(ItemInit.REDSTONE_CONTROLLER.get());
|
||||
output.accept(ItemRegistry.REDSTONE_CONTROLLER.get());
|
||||
// admin tools
|
||||
output.accept(ItemInit.OWNERSHIP_THEIF.get());
|
||||
output.accept(ItemRegistry.OWNERSHIP_THEIF.get());
|
||||
// tool items
|
||||
output.accept(ItemInit.SERVER.get());
|
||||
output.accept(ItemInit.CONFIGURATOR.get());
|
||||
output.accept(ItemInit.MINEPAD.get());
|
||||
output.accept(ItemInit.LASER_POINTER.get());
|
||||
output.accept(ItemRegistry.SERVER.get());
|
||||
output.accept(ItemRegistry.CONFIGURATOR.get());
|
||||
output.accept(ItemRegistry.MINEPAD.get());
|
||||
output.accept(ItemRegistry.LASER_POINTER.get());
|
||||
|
||||
// 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
|
||||
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()
|
||||
);
|
||||
|
|
@ -5,20 +5,19 @@
|
|||
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));
|
||||
|
||||
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, down;
|
||||
public final Vector3i left, right;
|
||||
public final Vector3i forward, backward;
|
||||
|
||||
public final Vector3i up;
|
||||
public final Vector3i right;
|
||||
public final Vector3i forward;
|
||||
public final Vector3i down;
|
||||
public final Vector3i left;
|
||||
public final Vector3i backward;
|
||||
// mostly used for click coordinate calculations
|
||||
public final Vector3i horizontal, vertical;
|
||||
|
||||
BlockSide(Vector3i u, Vector3i r, Vector3i f) {
|
||||
up = u;
|
||||
|
|
@ -27,10 +26,12 @@ public enum BlockSide {
|
|||
down = u.clone().neg();
|
||||
left = r.clone().neg();
|
||||
backward = f.clone().neg();
|
||||
|
||||
horizontal = new Vector3i(Math.abs(r.x), Math.abs(r.y), Math.abs(r.z));
|
||||
vertical = new Vector3i(Math.abs(u.x), Math.abs(u.y), Math.abs(u.z));
|
||||
}
|
||||
|
||||
public BlockSide reverse()
|
||||
{
|
||||
public BlockSide reverse() {
|
||||
int side = ordinal();
|
||||
int div = side / 2;
|
||||
int rest = 1 - side % 2;
|
||||
|
|
@ -49,5 +50,4 @@ public enum BlockSide {
|
|||
BlockSide[] values = values();
|
||||
return (s < 0 || s >= values.length) ? null : values[s];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
package net.montoyo.wd.utilities;
|
||||
|
||||
public final class Bounds {
|
||||
|
||||
public final int minX;
|
||||
public final int minY;
|
||||
public final int maxX;
|
||||
|
|
@ -25,5 +24,4 @@ public final class Bounds {
|
|||
public final int getHeight() {
|
||||
return maxY - minY;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@ public class DistSafety {
|
|||
public static ClientProxy createProxy() {
|
||||
return new ClientProxy();
|
||||
}
|
||||
|
||||
public static boolean isConnected() {
|
||||
if (Minecraft.getInstance().getConnection() == null) return false;
|
||||
if (Minecraft.getInstance().getConnection().getConnection().isConnecting()) return false;
|
||||
return Minecraft.getInstance().getConnection().getConnection().isConnected();
|
||||
}
|
||||
|
||||
public static boolean isConnected() {
|
||||
if (Minecraft.getInstance().getConnection() == null) return false;
|
||||
if (Minecraft.getInstance().getConnection().getConnection().isConnecting()) return false;
|
||||
return Minecraft.getInstance().getConnection().getConnection().isConnected();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,29 +8,27 @@ import org.apache.logging.log4j.Level;
|
|||
import org.apache.logging.log4j.LogManager;
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@ package net.montoyo.wd.utilities;
|
|||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.level.LevelAccessor;
|
||||
import net.montoyo.wd.WebDisplays;
|
||||
import net.montoyo.wd.init.BlockInit;
|
||||
import net.montoyo.wd.registry.BlockRegistry;
|
||||
|
||||
public abstract class Multiblock {
|
||||
|
||||
|
|
@ -51,7 +50,7 @@ public abstract class Multiblock {
|
|||
do {
|
||||
pos.add(side.left);
|
||||
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);
|
||||
|
||||
|
|
@ -59,7 +58,7 @@ public abstract class Multiblock {
|
|||
do {
|
||||
pos.add(side.down);
|
||||
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);
|
||||
}
|
||||
|
|
@ -78,7 +77,7 @@ public abstract class Multiblock {
|
|||
pos.add(side.up);
|
||||
pos.toBlock(bp);
|
||||
ret.y++;
|
||||
} while(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get());
|
||||
} while(world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get());
|
||||
|
||||
pos.add(side.down);
|
||||
|
||||
|
|
@ -87,7 +86,7 @@ public abstract class Multiblock {
|
|||
pos.add(side.right);
|
||||
pos.toBlock(bp);
|
||||
ret.x++;
|
||||
} while(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get());
|
||||
} while(world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -103,17 +102,17 @@ public abstract class Multiblock {
|
|||
for(int y = 0; y < size.y; y++) {
|
||||
for(int x = 0; x < size.x; x++) {
|
||||
pos.toBlock(bp);
|
||||
if(!(world.getBlockState(bp).getBlock() == BlockInit.blockScreen.get()))
|
||||
if(!(world.getBlockState(bp).getBlock() == BlockRegistry.SCREEN_BLOCk.get()))
|
||||
return pos; //Hole
|
||||
|
||||
pos.add(side.forward);
|
||||
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
|
||||
|
||||
pos.addMul(side.backward, 2);
|
||||
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
|
||||
|
||||
pos.add(side.forward);
|
||||
|
|
@ -130,7 +129,7 @@ public abstract class Multiblock {
|
|||
|
||||
for(int y = 0; y < size.y; y++) {
|
||||
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
|
||||
|
||||
pos.add(side.up);
|
||||
|
|
@ -142,7 +141,7 @@ public abstract class Multiblock {
|
|||
|
||||
for(int y = 0; y < size.y; y++) {
|
||||
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
|
||||
|
||||
pos.add(side.up);
|
||||
|
|
@ -154,7 +153,7 @@ public abstract class Multiblock {
|
|||
|
||||
for(int x = 0; x < size.x; x++) {
|
||||
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
|
||||
|
||||
pos.add(side.right);
|
||||
|
|
@ -166,7 +165,7 @@ public abstract class Multiblock {
|
|||
|
||||
for(int x = 0; x < size.x; x++) {
|
||||
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
|
||||
|
||||
pos.add(side.right);
|
||||
|
|
|
|||
|
|
@ -7,45 +7,45 @@ package net.montoyo.wd.utilities;
|
|||
import net.minecraft.world.phys.AABB;
|
||||
|
||||
public final class MutableAABB extends AABB {
|
||||
public MutableAABB() {
|
||||
super(0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
public MutableAABB(Vector3i pos) {
|
||||
public MutableAABB() {
|
||||
super(0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
public MutableAABB(Vector3i pos) {
|
||||
super(pos.x, pos.y, pos.z, pos.x, pos.y, pos.z);
|
||||
}
|
||||
|
||||
public MutableAABB(Vector3i a, Vector3i b) {
|
||||
super(a.x, a.y, a.z, b.x, b.y, b.z);
|
||||
}
|
||||
|
||||
public MutableAABB(net.minecraft.world.phys.AABB bb) {
|
||||
super(bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ);
|
||||
}
|
||||
|
||||
public MutableAABB(double x1, double y1, double z1, double x2, double y2, double z2) {
|
||||
super(x1, y1, z1, x2, y2, z2);
|
||||
}
|
||||
|
||||
public MutableAABB expand(Vector3i vec) {
|
||||
if (vec.x > maxX)
|
||||
}
|
||||
|
||||
public MutableAABB(Vector3i a, Vector3i b) {
|
||||
super(a.x, a.y, a.z, b.x, b.y, b.z);
|
||||
}
|
||||
|
||||
public MutableAABB(net.minecraft.world.phys.AABB bb) {
|
||||
super(bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ);
|
||||
}
|
||||
|
||||
public MutableAABB(double x1, double y1, double z1, double x2, double y2, double z2) {
|
||||
super(x1, y1, z1, x2, y2, z2);
|
||||
}
|
||||
|
||||
public MutableAABB expand(Vector3i vec) {
|
||||
if (vec.x > maxX)
|
||||
maxX = vec.x;
|
||||
else if (vec.x < minX)
|
||||
else if (vec.x < minX)
|
||||
minX = vec.x;
|
||||
|
||||
if (vec.y > maxY)
|
||||
|
||||
if (vec.y > maxY)
|
||||
maxY = vec.y;
|
||||
else if (vec.y < minY)
|
||||
minY = vec.y;
|
||||
|
||||
if (vec.z > maxZ)
|
||||
else if (vec.y < minY)
|
||||
minY = vec.y;
|
||||
|
||||
if (vec.z > maxZ)
|
||||
maxZ = vec.z;
|
||||
else if (vec.z < minZ)
|
||||
else if (vec.z < minZ)
|
||||
minZ = vec.z;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AABB move(double x, double y, double z) {
|
||||
minX += x;
|
||||
|
|
@ -56,28 +56,28 @@ public final class MutableAABB extends AABB {
|
|||
maxZ += z;
|
||||
return this;
|
||||
}
|
||||
|
||||
public net.minecraft.world.phys.AABB toMc() {
|
||||
return new AABB(minX, minY, minZ, maxX, maxY, maxZ);
|
||||
}
|
||||
|
||||
public void setAndCheck(double x1, double y1, double z1, double x2, double y2, double z2) {
|
||||
minX = Math.min(x1, x2);
|
||||
minY = Math.min(y1, y2);
|
||||
minZ = Math.min(z1, z2);
|
||||
|
||||
maxX = Math.max(x1, x2);
|
||||
maxY = Math.max(y1, y2);
|
||||
maxZ = Math.max(z1, z2);
|
||||
}
|
||||
|
||||
public void expand(double x1, double y1, double z1, double x2, double y2, double z2) {
|
||||
minX = Math.min(minX, Math.min(x1, x2));
|
||||
minY = Math.min(minY, Math.min(y1, y2));
|
||||
minZ = Math.min(minZ, Math.min(z1, z2));
|
||||
|
||||
maxX = Math.max(maxX, Math.max(x1, x2));
|
||||
maxY = Math.max(maxY, Math.max(y1, y2));
|
||||
maxZ = Math.max(maxZ, Math.max(z1, z2));
|
||||
}
|
||||
|
||||
public net.minecraft.world.phys.AABB toMc() {
|
||||
return new AABB(minX, minY, minZ, maxX, maxY, maxZ);
|
||||
}
|
||||
|
||||
public void setAndCheck(double x1, double y1, double z1, double x2, double y2, double z2) {
|
||||
minX = Math.min(x1, x2);
|
||||
minY = Math.min(y1, y2);
|
||||
minZ = Math.min(z1, z2);
|
||||
|
||||
maxX = Math.max(x1, x2);
|
||||
maxY = Math.max(y1, y2);
|
||||
maxZ = Math.max(z1, z2);
|
||||
}
|
||||
|
||||
public void expand(double x1, double y1, double z1, double x2, double y2, double z2) {
|
||||
minX = Math.min(minX, Math.min(x1, x2));
|
||||
minY = Math.min(minY, Math.min(y1, y2));
|
||||
minZ = Math.min(minZ, Math.min(z1, z2));
|
||||
|
||||
maxX = Math.max(maxX, Math.max(x1, x2));
|
||||
maxY = Math.max(maxY, Math.max(y1, y2));
|
||||
maxZ = Math.max(maxZ, Math.max(z1, z2));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import net.minecraft.network.FriendlyByteBuf;
|
|||
import java.util.UUID;
|
||||
|
||||
public final class NameUUIDPair {
|
||||
|
||||
public final String name;
|
||||
public final UUID uuid;
|
||||
|
||||
|
|
@ -48,7 +47,7 @@ public final class NameUUIDPair {
|
|||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if(obj == null || !(obj instanceof NameUUIDPair))
|
||||
if (obj == null || !(obj instanceof NameUUIDPair))
|
||||
return false;
|
||||
|
||||
return ((NameUUIDPair) obj).uuid.equals(uuid);
|
||||
|
|
@ -68,5 +67,4 @@ public final class NameUUIDPair {
|
|||
bb.writeLong(uuid.getMostSignificantBits());
|
||||
bb.writeLong(uuid.getLeastSignificantBits());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,11 +5,10 @@
|
|||
package net.montoyo.wd.utilities;
|
||||
|
||||
public final class NibbleArray {
|
||||
|
||||
private final byte[] data;
|
||||
|
||||
public NibbleArray(int count) {
|
||||
if((count & 1) != 0)
|
||||
if ((count & 1) != 0)
|
||||
count++;
|
||||
|
||||
data = new byte[count >> 1];
|
||||
|
|
@ -20,7 +19,7 @@ public final class NibbleArray {
|
|||
}
|
||||
|
||||
public final int get(int idx) {
|
||||
if((idx & 1) == 0)
|
||||
if ((idx & 1) == 0)
|
||||
return (data[idx >> 1] >> 4) & 0x0F; //MSB
|
||||
else
|
||||
return data[idx >> 1] & 0x0F; //LSB
|
||||
|
|
@ -29,7 +28,7 @@ public final class NibbleArray {
|
|||
public final void set(int idx, int val) {
|
||||
val &= 0x0F;
|
||||
|
||||
if((idx & 1) == 0) {
|
||||
if ((idx & 1) == 0) {
|
||||
idx >>= 1;
|
||||
data[idx] = (byte) ((data[idx] & 0x0F) | (val << 4)); //MSB
|
||||
} else {
|
||||
|
|
@ -43,5 +42,4 @@ public final class NibbleArray {
|
|||
System.arraycopy(data, 0, ret, 0, data.length);
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
package net.montoyo.wd.utilities;
|
||||
|
||||
public enum Rotation {
|
||||
|
||||
ROT_0(0.0f, false),
|
||||
ROT_90(90.0f, true),
|
||||
ROT_180(180.0f, false),
|
||||
|
|
@ -24,5 +23,4 @@ public enum Rotation {
|
|||
public int getAngleAsInt() {
|
||||
return (int) angle;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import net.minecraft.core.BlockPos;
|
|||
import java.util.Iterator;
|
||||
|
||||
public final class ScreenIterator implements Iterator<BlockPos> {
|
||||
|
||||
private final Vector3i vec1;
|
||||
private final Vector3i vec2;
|
||||
private final BlockSide side;
|
||||
|
|
@ -36,8 +35,8 @@ public final class ScreenIterator implements Iterator<BlockPos> {
|
|||
public final BlockPos next() {
|
||||
vec2.toBlock(blockPos);
|
||||
|
||||
if(++x >= size.x) {
|
||||
if(++y >= size.y)
|
||||
if (++x >= size.x) {
|
||||
if (++y >= size.y)
|
||||
hasNext = false;
|
||||
else {
|
||||
x = 0;
|
||||
|
|
@ -60,5 +59,4 @@ public final class ScreenIterator implements Iterator<BlockPos> {
|
|||
public int getIndex() {
|
||||
return y * size.x + x;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,41 +19,40 @@ import java.util.StringJoiner;
|
|||
import java.util.UUID;
|
||||
|
||||
public abstract class Util {
|
||||
|
||||
@Deprecated(forRemoval = true)
|
||||
public static void serialize(FriendlyByteBuf bb, Object f) {
|
||||
Class<?> cls = f.getClass();
|
||||
|
||||
if(cls == Integer.class || cls == Integer.TYPE)
|
||||
if (cls == Integer.class || cls == Integer.TYPE)
|
||||
bb.writeInt((Integer) f);
|
||||
else if(cls == Float.class || cls == Float.TYPE)
|
||||
else if (cls == Float.class || cls == Float.TYPE)
|
||||
bb.writeFloat((Float) f);
|
||||
else if(cls == Double.class || cls == Double.TYPE)
|
||||
else if (cls == Double.class || cls == Double.TYPE)
|
||||
bb.writeDouble((Double) f);
|
||||
else if(cls == Boolean.class || cls == Boolean.TYPE)
|
||||
else if (cls == Boolean.class || cls == Boolean.TYPE)
|
||||
bb.writeBoolean((Boolean) f);
|
||||
else if(cls == String.class)
|
||||
else if (cls == String.class)
|
||||
bb.writeUtf((String) f);
|
||||
else if(cls == NameUUIDPair.class)
|
||||
else if (cls == NameUUIDPair.class)
|
||||
((NameUUIDPair) f).writeTo(bb);
|
||||
else if(cls.isEnum())
|
||||
else if (cls.isEnum())
|
||||
bb.writeByte(((Enum<?>) f).ordinal());
|
||||
else if(cls.isArray()) {
|
||||
else if (cls.isArray()) {
|
||||
Object[] ray = (Object[]) f;
|
||||
|
||||
bb.writeInt(ray.length);
|
||||
for(Object o : ray)
|
||||
for (Object o : ray)
|
||||
serialize(bb, o);
|
||||
} else if (cls == ResourceLocation.class) {
|
||||
bb.writeUtf(f.toString());
|
||||
} else if(!cls.isPrimitive()) {
|
||||
} else if (!cls.isPrimitive()) {
|
||||
Field[] fields = cls.getFields();
|
||||
|
||||
for(Field ff : fields) {
|
||||
for (Field ff : fields) {
|
||||
try {
|
||||
if(ff.getAnnotation(DontSerialize.class) == null && !Modifier.isStatic(ff.getModifiers()))
|
||||
if (ff.getAnnotation(DontSerialize.class) == null && !Modifier.isStatic(ff.getModifiers()))
|
||||
serialize(bb, ff.get(f));
|
||||
} catch(IllegalAccessException e) {
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(String.format("Caught IllegalAccessException for %s.%s", cls.getName(), ff.getName()));
|
||||
}
|
||||
|
|
@ -61,51 +60,51 @@ public abstract class Util {
|
|||
} else
|
||||
throw new RuntimeException(String.format("Cannot transmit class %s over network!", cls.getName()));
|
||||
}
|
||||
|
||||
|
||||
@Deprecated(forRemoval = true)
|
||||
public static Object unserialize(FriendlyByteBuf bb, Class cls) {
|
||||
if(cls == Integer.class || cls == Integer.TYPE)
|
||||
if (cls == Integer.class || cls == Integer.TYPE)
|
||||
return bb.readInt();
|
||||
else if(cls == Float.class || cls == Float.TYPE)
|
||||
else if (cls == Float.class || cls == Float.TYPE)
|
||||
return bb.readFloat();
|
||||
else if(cls == Double.class || cls == Double.TYPE)
|
||||
else if (cls == Double.class || cls == Double.TYPE)
|
||||
return bb.readDouble();
|
||||
else if(cls == Boolean.class || cls == Boolean.TYPE)
|
||||
else if (cls == Boolean.class || cls == Boolean.TYPE)
|
||||
return bb.readBoolean();
|
||||
else if(cls == String.class)
|
||||
else if (cls == String.class)
|
||||
return bb.readUtf();
|
||||
else if(cls == NameUUIDPair.class)
|
||||
else if (cls == NameUUIDPair.class)
|
||||
return new NameUUIDPair(bb);
|
||||
else if(cls.isEnum())
|
||||
else if (cls.isEnum())
|
||||
return cls.getEnumConstants()[bb.readByte()];
|
||||
else if(cls.isArray()) {
|
||||
else if (cls.isArray()) {
|
||||
Object[] ray = new Object[bb.readInt()];
|
||||
|
||||
for(int i = 0; i < ray.length; i++)
|
||||
for (int i = 0; i < ray.length; i++)
|
||||
ray[i] = unserialize(bb, cls.getComponentType());
|
||||
|
||||
return Arrays.copyOf(ray, ray.length, cls);
|
||||
} else if(cls == ResourceLocation.class) {
|
||||
} else if (cls == ResourceLocation.class) {
|
||||
return new ResourceLocation(bb.readUtf());
|
||||
} else if(!cls.isPrimitive()) {
|
||||
} else if (!cls.isPrimitive()) {
|
||||
Object ret;
|
||||
Field[] fields = cls.getFields();
|
||||
|
||||
try {
|
||||
ret = cls.newInstance();
|
||||
} catch(InstantiationException e) {
|
||||
} catch (InstantiationException e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(String.format("Caught InstantiationException for class %s", cls.getName()));
|
||||
} catch(IllegalAccessException e) {
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(String.format("Caught IllegalAccessException for class %s", cls.getName()));
|
||||
}
|
||||
|
||||
for(Field ff : fields) {
|
||||
for (Field ff : fields) {
|
||||
try {
|
||||
if(ff.getAnnotation(DontSerialize.class) == null && !Modifier.isStatic(ff.getModifiers()))
|
||||
if (ff.getAnnotation(DontSerialize.class) == null && !Modifier.isStatic(ff.getModifiers()))
|
||||
ff.set(ret, unserialize(bb, ff.getType()));
|
||||
} catch(IllegalAccessException e) {
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(String.format("Caught IllegalAccessException for %s.%s", cls.getName(), ff.getName()));
|
||||
}
|
||||
}
|
||||
|
|
@ -117,12 +116,12 @@ public abstract class Util {
|
|||
|
||||
public static String addSlashes(String str) {
|
||||
String out = "";
|
||||
for(int i = 0; i < str.length(); i++) {
|
||||
for (int i = 0; i < str.length(); i++) {
|
||||
char c = str.charAt(i);
|
||||
|
||||
if(c == '\\')
|
||||
if (c == '\\')
|
||||
out += "\\\\";
|
||||
else if(c == '\"')
|
||||
else if (c == '\"')
|
||||
out += "\\\"";
|
||||
else
|
||||
out += c;
|
||||
|
|
@ -150,7 +149,8 @@ public abstract class Util {
|
|||
public static void silentClose(Object obj) {
|
||||
try {
|
||||
obj.getClass().getMethod("close").invoke(obj);
|
||||
} catch(Throwable t) {}
|
||||
} catch (Throwable t) {
|
||||
}
|
||||
}
|
||||
|
||||
public static String addProtocol(String str) {
|
||||
|
|
@ -161,13 +161,13 @@ public abstract class Util {
|
|||
return fname.isEmpty() || fname.length() > 64 || fname.charAt(0) == '.' || fname.indexOf('/') >= 0 || fname.indexOf('\\') >= 0;
|
||||
}
|
||||
|
||||
public static final String[] SIZES = { "bytes", "KiB", "MiB", "GiB", "TiB" };
|
||||
public static final String[] SIZES = {"bytes", "KiB", "MiB", "GiB", "TiB"};
|
||||
|
||||
public static String sizeString(long l) {
|
||||
double d = (double) l;
|
||||
int size = 0;
|
||||
|
||||
while(l >= 1024L && size + 1 < SIZES.length) {
|
||||
while (l >= 1024L && size + 1 < SIZES.length) {
|
||||
d /= 1024.0;
|
||||
l /= 1024L;
|
||||
size++;
|
||||
|
|
@ -183,7 +183,7 @@ public abstract class Util {
|
|||
}
|
||||
|
||||
public static CompoundTag writeOwnerToNBT(CompoundTag tag, NameUUIDPair owner) {
|
||||
if(owner != null) {
|
||||
if (owner != null) {
|
||||
tag.putLong("OwnerMSB", owner.uuid.getMostSignificantBits());
|
||||
tag.putLong("OwnerLSB", owner.uuid.getLeastSignificantBits());
|
||||
tag.putString("OwnerName", owner.name);
|
||||
|
|
@ -199,5 +199,4 @@ public abstract class Util {
|
|||
|
||||
return new NameUUIDPair(str, new UUID(msb, lsb));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,38 +7,31 @@ package net.montoyo.wd.utilities;
|
|||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
public final class Vector2i {
|
||||
|
||||
public int x;
|
||||
public int y;
|
||||
|
||||
public Vector2i()
|
||||
{
|
||||
public Vector2i() {
|
||||
x = 0;
|
||||
y = 0;
|
||||
}
|
||||
|
||||
public Vector2i(int val)
|
||||
{
|
||||
public Vector2i(int val) {
|
||||
x = val;
|
||||
y = val;
|
||||
}
|
||||
|
||||
public Vector2i(int x, int y)
|
||||
{
|
||||
public Vector2i(int x, int y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public Vector2i(ByteBuf bb)
|
||||
{
|
||||
public Vector2i(ByteBuf bb) {
|
||||
x = bb.readInt();
|
||||
y = bb.readInt();
|
||||
}
|
||||
|
||||
public void writeTo(ByteBuf bb)
|
||||
{
|
||||
public void writeTo(ByteBuf bb) {
|
||||
bb.writeInt(x);
|
||||
bb.writeInt(y);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
package net.montoyo.wd.utilities;
|
||||
|
||||
public final class Vector3f {
|
||||
|
||||
public float x;
|
||||
public float y;
|
||||
public float z;
|
||||
|
|
@ -40,7 +39,7 @@ public final class Vector3f {
|
|||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if(o instanceof Vector3f) {
|
||||
if (o instanceof Vector3f) {
|
||||
Vector3f src = (Vector3f) o;
|
||||
|
||||
return (src.x == x && src.y == y && src.z == z);
|
||||
|
|
@ -182,5 +181,4 @@ public final class Vector3f {
|
|||
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import io.netty.buffer.ByteBuf;
|
|||
import net.minecraft.core.BlockPos;
|
||||
|
||||
public final class Vector3i {
|
||||
|
||||
public int x;
|
||||
public int y;
|
||||
public int z;
|
||||
|
|
@ -55,7 +54,7 @@ public final class Vector3i {
|
|||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if(o instanceof Vector3i) {
|
||||
if (o instanceof Vector3i) {
|
||||
Vector3i src = (Vector3i) o;
|
||||
|
||||
return (src.x == x && src.y == y && src.z == z);
|
||||
|
|
@ -155,48 +154,42 @@ public final class Vector3i {
|
|||
return this;
|
||||
}
|
||||
|
||||
public Vector3i set(int x, int y, int z)
|
||||
{
|
||||
public Vector3i set(int x, int y, int z) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Vector3i set(double x, double y, double z)
|
||||
{
|
||||
public Vector3i set(double x, double y, double z) {
|
||||
this.x = (int) x;
|
||||
this.y = (int) y;
|
||||
this.z = (int) z;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Vector3i set(float x, float y, float z)
|
||||
{
|
||||
public Vector3i set(float x, float y, float z) {
|
||||
this.x = (int) x;
|
||||
this.y = (int) y;
|
||||
this.z = (int) z;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Vector3i set(int val)
|
||||
{
|
||||
public Vector3i set(int val) {
|
||||
x = val;
|
||||
y = val;
|
||||
z = val;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Vector3i set(Vector3i val)
|
||||
{
|
||||
public Vector3i set(Vector3i val) {
|
||||
x = val.x;
|
||||
y = val.y;
|
||||
z = val.z;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Vector3i set(Vector3f vec)
|
||||
{
|
||||
public Vector3i set(Vector3f vec) {
|
||||
this.x = (int) vec.x;
|
||||
this.y = (int) vec.y;
|
||||
this.z = (int) vec.z;
|
||||
|
|
@ -210,6 +203,7 @@ public final class Vector3i {
|
|||
public Vector3f toFloat() {
|
||||
return new Vector3f((float) x, (float) y, (float) z);
|
||||
}
|
||||
|
||||
public BlockPos toBlock() {
|
||||
return new BlockPos(x, y, z);
|
||||
}
|
||||
|
|
@ -218,8 +212,7 @@ public final class Vector3i {
|
|||
bp.set(x, y, z);
|
||||
}
|
||||
|
||||
public int getChunkLocalPos()
|
||||
{
|
||||
public int getChunkLocalPos() {
|
||||
int lx = x & 15;
|
||||
int ly = y & 255;
|
||||
int lz = z & 15;
|
||||
|
|
@ -232,5 +225,4 @@ public final class Vector3i {
|
|||
bb.writeInt(y);
|
||||
bb.writeInt(z);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,130 +10,128 @@ import java.net.MalformedURLException;
|
|||
import java.net.URL;
|
||||
|
||||
public enum VideoType {
|
||||
|
||||
YOUTUBE(
|
||||
"document.getElementById(\"movie_player\").",
|
||||
new Function("setVolume(", ")"),
|
||||
new Function("getCurrentTime(", ")"),
|
||||
new Function("seekTo(", ")")
|
||||
),
|
||||
YOUTUBE_EMBED(
|
||||
"document.getElementsByClassName(\"html5-video-player\")[0].",
|
||||
new Function("setVolume(", ")"),
|
||||
new Function("getCurrentTime(", ")"),
|
||||
new Function("seekTo(", ")")
|
||||
);
|
||||
|
||||
private final String base;
|
||||
private final Function volume;
|
||||
private final Function getTime;
|
||||
private final Function setTime;
|
||||
private final int volumeCap;
|
||||
|
||||
VideoType(
|
||||
String base,
|
||||
Function volume,
|
||||
Function getTime,
|
||||
Function setTime
|
||||
) {
|
||||
this.base = base;
|
||||
this.volume = volume;
|
||||
this.getTime = getTime;
|
||||
this.setTime = setTime;
|
||||
// lol, what?
|
||||
volumeCap = volume.prefix.length() + 5 + volume.suffix.length();
|
||||
}
|
||||
|
||||
YOUTUBE(
|
||||
"document.getElementById(\"movie_player\").",
|
||||
new Function("setVolume(", ")"),
|
||||
new Function("getCurrentTime(", ")"),
|
||||
new Function("seekTo(", ")")
|
||||
),
|
||||
YOUTUBE_EMBED(
|
||||
"document.getElementsByClassName(\"html5-video-player\")[0].",
|
||||
new Function("setVolume(", ")"),
|
||||
new Function("getCurrentTime(", ")"),
|
||||
new Function("seekTo(", ")")
|
||||
);
|
||||
|
||||
private final String base;
|
||||
private final Function volume;
|
||||
private final Function getTime;
|
||||
private final Function setTime;
|
||||
private final int volumeCap;
|
||||
|
||||
VideoType(
|
||||
String base,
|
||||
Function volume,
|
||||
Function getTime,
|
||||
Function setTime
|
||||
) {
|
||||
this.base = base;
|
||||
this.volume = volume;
|
||||
this.getTime = getTime;
|
||||
this.setTime = setTime;
|
||||
// lol, what?
|
||||
volumeCap = volume.prefix.length() + 5 + volume.suffix.length();
|
||||
}
|
||||
|
||||
// public static void registerQueries(JSQueryDispatcher jsQueryDispatcher) {
|
||||
// // TODO: register GetTime query
|
||||
// }
|
||||
|
||||
|
||||
protected static class Function {
|
||||
String prefix, suffix;
|
||||
|
||||
public Function(String prefix, String suffix) {
|
||||
this.prefix = prefix;
|
||||
this.suffix = suffix;
|
||||
}
|
||||
|
||||
public String apply() {
|
||||
return prefix + suffix;
|
||||
}
|
||||
|
||||
public String apply(String arg) {
|
||||
return prefix + arg + suffix;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static VideoType getTypeFromURL(@Nonnull URL url) {
|
||||
String loHost = url.getHost().toLowerCase();
|
||||
if (loHost.equals("youtu.be"))
|
||||
return url.getPath().length() > 1 ? YOUTUBE : null;
|
||||
else if (!loHost.equals("www.youtube.com") && !loHost.equals("youtube.com"))
|
||||
return null;
|
||||
|
||||
String loPath = url.getPath().toLowerCase();
|
||||
if (loPath.equals("/watch")) {
|
||||
if (url.getQuery() != null && (url.getQuery().startsWith("v=") || url.getQuery().contains("&v=")))
|
||||
return YOUTUBE;
|
||||
} else if (loPath.startsWith("/embed/"))
|
||||
return loPath.length() > 7 ? YOUTUBE_EMBED : null;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static VideoType getTypeFromURL(@Nonnull String url) {
|
||||
try {
|
||||
return getTypeFromURL(new URL(url));
|
||||
} catch (MalformedURLException ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public String getVideoIDFromURL(@Nonnull URL url) {
|
||||
if (this == YOUTUBE) {
|
||||
if (url.getHost().equalsIgnoreCase("youtu.be"))
|
||||
return url.getPath().substring(1);
|
||||
|
||||
String args[] = url.getQuery().split("&");
|
||||
for (String arg : args) {
|
||||
if (arg.startsWith("v="))
|
||||
return arg.substring(2);
|
||||
}
|
||||
} else if (this == YOUTUBE_EMBED)
|
||||
return url.getPath().substring(7);
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public String getURLFromID(@Nonnull String vid, boolean autoplay) {
|
||||
String format;
|
||||
if (this == YOUTUBE)
|
||||
format = autoplay ? "https://www.youtube.com/watch?v=%s&autoplay=1" : "https://www.youtube.com/watch?v=%s";
|
||||
else if (this == YOUTUBE_EMBED)
|
||||
format = autoplay ? "https://www.youtube.com/embed/%s?autoplay=1" : "https://www.youtube.com/embed/%s";
|
||||
else
|
||||
return "";
|
||||
|
||||
return String.format(format, vid);
|
||||
}
|
||||
|
||||
// TODO: timestamp stuff
|
||||
@Nonnull
|
||||
public String getVolumeJSQuery(int volInt, int volFrac) {
|
||||
return volume.apply(volInt + "." + volFrac);
|
||||
}
|
||||
|
||||
public String getTimeStampQuery() {
|
||||
return getTime.apply();
|
||||
}
|
||||
|
||||
public String setTimeStampQuery(float ts) {
|
||||
return setTime.apply(String.valueOf(ts));
|
||||
}
|
||||
|
||||
String prefix, suffix;
|
||||
|
||||
public Function(String prefix, String suffix) {
|
||||
this.prefix = prefix;
|
||||
this.suffix = suffix;
|
||||
}
|
||||
|
||||
public String apply() {
|
||||
return prefix + suffix;
|
||||
}
|
||||
|
||||
public String apply(String arg) {
|
||||
return prefix + arg + suffix;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static VideoType getTypeFromURL(@Nonnull URL url) {
|
||||
String loHost = url.getHost().toLowerCase();
|
||||
if (loHost.equals("youtu.be"))
|
||||
return url.getPath().length() > 1 ? YOUTUBE : null;
|
||||
else if (!loHost.equals("www.youtube.com") && !loHost.equals("youtube.com"))
|
||||
return null;
|
||||
|
||||
String loPath = url.getPath().toLowerCase();
|
||||
if (loPath.equals("/watch")) {
|
||||
if (url.getQuery() != null && (url.getQuery().startsWith("v=") || url.getQuery().contains("&v=")))
|
||||
return YOUTUBE;
|
||||
} else if (loPath.startsWith("/embed/"))
|
||||
return loPath.length() > 7 ? YOUTUBE_EMBED : null;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static VideoType getTypeFromURL(@Nonnull String url) {
|
||||
try {
|
||||
return getTypeFromURL(new URL(url));
|
||||
} catch (MalformedURLException ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public String getVideoIDFromURL(@Nonnull URL url) {
|
||||
if (this == YOUTUBE) {
|
||||
if (url.getHost().equalsIgnoreCase("youtu.be"))
|
||||
return url.getPath().substring(1);
|
||||
|
||||
String args[] = url.getQuery().split("&");
|
||||
for (String arg : args) {
|
||||
if (arg.startsWith("v="))
|
||||
return arg.substring(2);
|
||||
}
|
||||
} else if (this == YOUTUBE_EMBED)
|
||||
return url.getPath().substring(7);
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public String getURLFromID(@Nonnull String vid, boolean autoplay) {
|
||||
String format;
|
||||
if (this == YOUTUBE)
|
||||
format = autoplay ? "https://www.youtube.com/watch?v=%s&autoplay=1" : "https://www.youtube.com/watch?v=%s";
|
||||
else if (this == YOUTUBE_EMBED)
|
||||
format = autoplay ? "https://www.youtube.com/embed/%s?autoplay=1" : "https://www.youtube.com/embed/%s";
|
||||
else
|
||||
return "";
|
||||
|
||||
return String.format(format, vid);
|
||||
}
|
||||
|
||||
// TODO: timestamp stuff
|
||||
@Nonnull
|
||||
public String getVolumeJSQuery(int volInt, int volFrac) {
|
||||
return volume.apply(volInt + "." + volFrac);
|
||||
}
|
||||
|
||||
public String getTimeStampQuery() {
|
||||
return getTime.apply();
|
||||
}
|
||||
|
||||
public String setTimeStampQuery(float ts) {
|
||||
return setTime.apply(String.valueOf(ts));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user