From 48d214a0eedefec44c74ac80c52a751374b34974 Mon Sep 17 00:00:00 2001 From: Andrew-71 Date: Fri, 16 Jun 2023 18:09:00 +0300 Subject: [PATCH] There's this mountain of pure diamond --- CHANGELOG.txt | 15 ++ .../tardim_ic/blockstates/food_machine.json | 8 + .../item/cartridges/cartridge_pins.png | Bin 0 -> 163 bytes .../item/cartridges/cartridge_shell.png | Bin 0 -> 216 bytes .../item/cartridges/temp/cartridge_blue.png | Bin 0 -> 361 bytes .../item/cartridges/temp/cartridge_green.png | Bin 0 -> 248 bytes .../item/cartridges/temp/cartridge_red.png | Bin 0 -> 382 bytes .../a71/tardim_ic/tardim_ic/Registration.java | 17 +- .../blocks/food_machine/FoodMachineBlock.java | 107 +++++++++++++ .../food_machine/FoodMachineTileEntity.java | 40 +++++ .../redstone_input/RedstoneInputBlock.java | 4 +- .../RedstoneInputTileEntity.java | 2 +- .../{ => blocks}/roundels/roundels.txt | 0 .../command/CommandCloisterBell.java | 3 + .../tardim_ic/command/CommandListBiomes.java | 11 +- .../command/CommandListDimensions.java | 4 +- .../command/CommandModemTransmit.java | 5 + .../FakeTardimPeripheralTileEntity.java} | 6 +- .../ITardimPeripheralTileEntity.java | 14 ++ .../TardimPeripheralProvider.java | 37 +++++ .../DigitalInterfaceBlock.java | 2 +- .../DigitalInterfaceTileEntity.java | 14 ++ .../DigitalInterfacePeripheral.java | 148 ++--------------- .../peripherals/FuelStoragePeripheral.java | 73 +++++++++ .../peripherals/TardimPeripheral.java | 67 ++++++++ .../peripherals/TardimScannerPeripheral.java | 150 ++++++++++++++++++ .../peripherals/TimeRotorPeripheral.java | 107 +++++++++++++ .../DigitalInterfacePeripheralProvider.java | 22 --- .../DigitalInterfaceTileEntity.java | 97 ----------- .../IDigitalInterfaceEntity.java | 12 -- .../tardim_ic/mixin/BetterFuelMapMixin.java | 42 +++++ .../mixin/BetterFuelStorageMixin.java | 52 ++++++ .../tardim_ic/mixin/JammerMixin.java | 20 +-- .../tardim_ic/registration/CommandInit.java | 2 + .../registration/ComputerCraftCompat.java | 8 +- .../src/main/resources/mixins.tardim_ic.json | 2 + SWD_MOMENT.txt | 8 +- TODO.txt | 8 +- 38 files changed, 814 insertions(+), 293 deletions(-) create mode 100644 CHANGELOG.txt create mode 100644 Common/src/main/resources/assets/tardim_ic/blockstates/food_machine.json create mode 100644 Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/cartridge_pins.png create mode 100644 Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/cartridge_shell.png create mode 100644 Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/temp/cartridge_blue.png create mode 100644 Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/temp/cartridge_green.png create mode 100644 Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/temp/cartridge_red.png create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/food_machine/FoodMachineBlock.java create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/food_machine/FoodMachineTileEntity.java rename Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/{ => blocks}/redstone_input/RedstoneInputBlock.java (98%) rename Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/{ => blocks}/redstone_input/RedstoneInputTileEntity.java (94%) rename Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/{ => blocks}/roundels/roundels.txt (100%) rename Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/{digital_interface/FakeDigitalInterfaceTileEntity.java => computercraft_compat/FakeTardimPeripheralTileEntity.java} (91%) create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/ITardimPeripheralTileEntity.java create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/TardimPeripheralProvider.java rename Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/{ => computercraft_compat/blocks}/digital_interface/DigitalInterfaceBlock.java (91%) create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/blocks/digital_interface/DigitalInterfaceTileEntity.java rename Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/{digital_interface => computercraft_compat/peripherals}/DigitalInterfacePeripheral.java (85%) create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/FuelStoragePeripheral.java create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TardimPeripheral.java create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TardimScannerPeripheral.java create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TimeRotorPeripheral.java delete mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfacePeripheralProvider.java delete mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceTileEntity.java delete mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/IDigitalInterfaceEntity.java create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/BetterFuelMapMixin.java create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/BetterFuelStorageMixin.java diff --git a/CHANGELOG.txt b/CHANGELOG.txt new file mode 100644 index 0000000..3afeadc --- /dev/null +++ b/CHANGELOG.txt @@ -0,0 +1,15 @@ +Added list-biomes and list-dimensions TARDIM commands + Corresponding ComputerCraft methods + This is a community-requested QOL feature that lets users scroll through available biomes and, + with lua methods, make advanced navigation dashboards even easier. + +Computercraft compatibility improvements + Made ComputerCraft optional + Added peripherals for fuel storage, time rotor and scanner blocks + Added digital interface methods that list biomes and dimensions + +Added Create compatibility + Added various display sources for fuel storage + +Improved TARDIM's fuel system + Any item that can be used as fuel in furnace should now be able to power up a TARDIM + Buckets no longer get destroyed, and only get their fluids taken \ No newline at end of file diff --git a/Common/src/main/resources/assets/tardim_ic/blockstates/food_machine.json b/Common/src/main/resources/assets/tardim_ic/blockstates/food_machine.json new file mode 100644 index 0000000..75f685a --- /dev/null +++ b/Common/src/main/resources/assets/tardim_ic/blockstates/food_machine.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "tardim_ic:block/food_machine"}, + "facing=east": { "model": "tardim_ic:block/food_machine", "y": 90}, + "facing=south": { "model": "tardim_ic:block/food_machine", "y": 180}, + "facing=west": { "model": "tardim_ic:block/food_machine", "y": 270} + } +} \ No newline at end of file diff --git a/Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/cartridge_pins.png b/Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/cartridge_pins.png new file mode 100644 index 0000000000000000000000000000000000000000..6aab34aeebde88bb6c7b97c138a9d5c813ce9453 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Vm)0PLo9le z6C~;$y#Js1KVM(y-~a!PxBlPmZuu`9biPIJ!@o0CZRg|v8SkmBo&WH&c+)R-WnU}WaUXtRmhUVkvjrLT1p0{hAlp6y>#ZOgU-&wjLK#LeW MUHx3vIVCg!06m&S%K!iX literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/cartridge_shell.png b/Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/cartridge_shell.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4d59eef62b88b0108fc8fac9ffb38ef54eba45 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_SO6joDAgmd%8G= zXiVHXVI%J$0|D3hfv*}|dYAGX;PW}C(lgQ1h)I-rNi*x5NvFOs&3`0vnk%pP?Edxt z-@kjE@V$sl|E^d1j!%cnlAfIj_?Xnu#l_Xcz0atGEnY}cc)rg6KsClas-BL4lg*?P zM84=aPx$BS}O-R5*>*kiAO702GD4)FdQWVg(I?NKiVuxC)A6ClT@(;^Zt8U%*EYbrv06 zb*K(i2RAJ(Mnp&(t8FlvG{nIlk|tQ!p6y=lIeh2B&`XF9(+lOuy3(m1Y*Ab`shu6N zva^veJYJU*o?L%oyLv>|jc}R`x^Bc<>w*#C16fR+0wDG;7B@}6B-piqC7^!P%GB{Xg$3+;n->v84aD!CU_Se)>W<-N9w5rbM$z zgTV;~0sCzyn>H{Wdsmd;t03(tu|!aX?T|vVgG4Mp7lY;%bAw;+A3WhQV@T2FXy$2^ zY+J|9s&Jd-Gt(JYg=P*Z24)53gl)|^Zr}KJMXh02BCteK?APz@I)CjqE}vP!oS@fm w^G-nQ7kh2ni3JLW7<6P33>`{zczhWcI?d*=R3D$Z59k#JPgg&ebxsLQ01S>@!2kdN literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/temp/cartridge_red.png b/Common/src/main/resources/assets/tardim_ic/textures/item/cartridges/temp/cartridge_red.png new file mode 100644 index 0000000000000000000000000000000000000000..c930dc0f036423bbe53a20d0fc26aff574d6390f GIT binary patch literal 382 zcmV-^0fGLBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizW@LZzX3P}QzQTY0TW3?K~y+TV;E*2 zTu<%)-~ZG8-(DpA|NnzDFbxtz#!#hjzyzh?;Qg8P44=RJXL$SiKA67q<^zMW5I-1W z1B_4_3_v!(6n^^o3rrt>_?*FAO`d^+g_+^%t9J}5FWo}XgTirFk^8SID#-BT*B>xn zjF*ey?30&Z_M2}%!1UQ?uTb=0c;WDOW`;ZbQeZa7R%-<*29Tj3SBP+NfW?skh5;}+7UAAkOWX>@?$0uX>X z_0jv!;J}P-tYQ%N@dJyY1FQzX0t^H|E;xAnEW^#)_fW)P03}3Wz*tHQoM4ax4Oc7- cdBDH`00HiA@M9U^-v9sr07*qoM6N<$f`@6Ke*gdg literal 0 HcmV?d00001 diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/Registration.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/Registration.java index 4d792e5..a4d86bc 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/Registration.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/Registration.java @@ -14,10 +14,11 @@ import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import su.a71.tardim_ic.tardim_ic.blocks.food_machine.FoodMachineBlock; +import su.a71.tardim_ic.tardim_ic.blocks.food_machine.FoodMachineTileEntity; import su.a71.tardim_ic.tardim_ic.jammer.LocationJammerMaterial; -import su.a71.tardim_ic.tardim_ic.redstone_input.RedstoneInputBlock; -import su.a71.tardim_ic.tardim_ic.redstone_input.RedstoneInputTileEntity; -import su.a71.tardim_ic.tardim_ic.Constants; +import su.a71.tardim_ic.tardim_ic.blocks.redstone_input.RedstoneInputBlock; +import su.a71.tardim_ic.tardim_ic.blocks.redstone_input.RedstoneInputTileEntity; import su.a71.tardim_ic.tardim_ic.registration.CommandInit; import su.a71.tardim_ic.tardim_ic.registration.ComputerCraftCompat; import su.a71.tardim_ic.tardim_ic.registration.CreateCompat; @@ -26,6 +27,7 @@ import su.a71.tardim_ic.tardim_ic.registration.Exteriors; public class Registration { // Blocks public static final Block REDSTONE_TARDIM_INPUT = new RedstoneInputBlock(); + public static final Block FOOD_MACHINE = new FoodMachineBlock(); // Tile Entities public static final BlockEntityType REDSTONE_TARDIM_INPUT_TILEENTITY = Registry.register( @@ -34,6 +36,12 @@ public class Registration { FabricBlockEntityTypeBuilder.create(RedstoneInputTileEntity::new, REDSTONE_TARDIM_INPUT).build() ); + public static final BlockEntityType FOOD_MACHINE_TILEENTITY = Registry.register( + Registry.BLOCK_ENTITY_TYPE, + new ResourceLocation("tardim_ic", "food_machine"), + FabricBlockEntityTypeBuilder.create(FoodMachineTileEntity::new, FOOD_MACHINE).build() + ); + public static final CreativeModeTab TARDIM_IC_TAB = FabricItemGroupBuilder .create(new ResourceLocation("tardim_ic")) .icon(() -> new ItemStack(REDSTONE_TARDIM_INPUT)) @@ -61,6 +69,9 @@ public class Registration { Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "redstone_tardim_input"), REDSTONE_TARDIM_INPUT); Registry.register(Registry.ITEM, new ResourceLocation(Constants.MOD_ID, "redstone_tardim_input"), new BlockItem(REDSTONE_TARDIM_INPUT, new FabricItemSettings().tab(TARDIM_IC_TAB))); + Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "food_machine"), FOOD_MACHINE); + Registry.register(Registry.ITEM, new ResourceLocation(Constants.MOD_ID, "food_machine"), new BlockItem(FOOD_MACHINE, new FabricItemSettings().tab(TARDIM_IC_TAB))); + Registry.register(Registry.SOUND_EVENT, CLOISTER_SOUND, CLOISTER_SOUND_EVENT); CommandInit.init(); diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/food_machine/FoodMachineBlock.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/food_machine/FoodMachineBlock.java new file mode 100644 index 0000000..fb1565e --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/food_machine/FoodMachineBlock.java @@ -0,0 +1,107 @@ +package su.a71.tardim_ic.tardim_ic.blocks.food_machine; + +import com.swdteam.tardim.common.init.TRDDimensions; +import com.swdteam.tardim.common.init.TRDSounds; +import com.swdteam.tardim.network.NetworkHandler; +import com.swdteam.tardim.network.PacketOpenEditGui; +import com.swdteam.tardim.tardim.TardimData; +import com.swdteam.tardim.tardim.TardimManager; +import com.swdteam.tardim.tileentity.TileEntityBaseTardimPanel; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.DebugPackets; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.NotNull; +import su.a71.tardim_ic.tardim_ic.Registration; +import su.a71.tardim_ic.tardim_ic.blocks.redstone_input.RedstoneInputTileEntity; +import su.a71.tardim_ic.tardim_ic.utils.FakePlayer; + +import javax.annotation.Nullable; + +import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; + +public class FoodMachineBlock extends HorizontalDirectionalBlock implements EntityBlock { + public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + + public FoodMachineBlock() { + super(FabricBlockSettings.of(Material.METAL).strength(2, 4).noOcclusion()); // No occlusion? + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); + //this.registerDefaultState(this.stateDefinition.any().setValue(HORIZONTAL_FACING, Direction.NORTH)); + } + + public BlockState getStateForPlacement(BlockPlaceContext $$0) { + return this.defaultBlockState().setValue(FACING, $$0.getHorizontalDirection().getOpposite()); + } + protected void createBlockStateDefinition(StateDefinition.Builder $$0) { + $$0.add(FACING); + } + + + @Nullable + @Override + public BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) { + return Registration.FOOD_MACHINE_TILEENTITY.create(pos, state); + } + + @Override + public InteractionResult use(BlockState blockState, Level w, BlockPos blockPos, Player player, InteractionHand hand, BlockHitResult p_60508_) { + if (!w.isClientSide) { + w.playSound(null, blockPos, TRDSounds.TARDIM_BEEP, SoundSource.BLOCKS, 0.3F, 0.5F); + BlockEntity be = w.getBlockEntity(blockPos); + if (be instanceof FoodMachineTileEntity && w.dimension() == TRDDimensions.TARDIS) { + TardimData data = TardimManager.getFromPos(blockPos); + if (data != null && data.hasPermission(player)) { + if (data.getFuel() >= 0.05) { + data.setFuel(data.getFuel() - 0.05); // Remove some fuel in exchange for food + ItemEntity food = new ItemEntity(EntityType.ITEM, w); + + // Select type of food here + food.setItem(new ItemStack(Items.BREAD, 1)); + + + food.setPos(Vec3.atCenterOf(blockPos).add(new Vec3(0, 0.2, 0))); + w.addFreshEntity(food); + } else { + player.displayClientMessage( + Component.literal("You do not have enough fuel").withStyle(ChatFormatting.DARK_RED).withStyle(ChatFormatting.BOLD), true + ); + } + return InteractionResult.CONSUME; + } + + player.displayClientMessage( + Component.literal("You do not have permission").withStyle(ChatFormatting.DARK_RED).withStyle(ChatFormatting.BOLD), true + ); + } + } + + return InteractionResult.CONSUME; + } + + public boolean canSurvive(BlockState blockState, LevelReader levelReader, BlockPos blockPos) { + return true; + } +} diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/food_machine/FoodMachineTileEntity.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/food_machine/FoodMachineTileEntity.java new file mode 100644 index 0000000..98966b8 --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/food_machine/FoodMachineTileEntity.java @@ -0,0 +1,40 @@ +package su.a71.tardim_ic.tardim_ic.blocks.food_machine; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import su.a71.tardim_ic.tardim_ic.Registration; + +import java.util.UUID; + +public class FoodMachineTileEntity extends BlockEntity { + public boolean isPowered = false; + public UUID lastPlayer = null; + + public FoodMachineTileEntity(BlockPos pos, BlockState state) { + super(Registration.REDSTONE_TARDIM_INPUT_TILEENTITY, pos, state); + } + + public BlockPos getPos() { + return this.worldPosition; + } + + + @Override + public void saveAdditional(CompoundTag tag) { + tag.putBoolean("is_powered", isPowered); + if (lastPlayer != null) { + tag.putUUID("last_player", lastPlayer); + } + super.saveAdditional(tag); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + isPowered = tag.getBoolean("is_powered"); + lastPlayer = tag.getUUID("last_player"); + } +} diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/redstone_input/RedstoneInputBlock.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/redstone_input/RedstoneInputBlock.java similarity index 98% rename from Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/redstone_input/RedstoneInputBlock.java rename to Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/redstone_input/RedstoneInputBlock.java index 5c81fc0..99ed818 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/redstone_input/RedstoneInputBlock.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/redstone_input/RedstoneInputBlock.java @@ -1,4 +1,4 @@ -package su.a71.tardim_ic.tardim_ic.redstone_input; +package su.a71.tardim_ic.tardim_ic.blocks.redstone_input; import com.swdteam.tardim.common.block.BlockBaseTardimPanel; import com.swdteam.tardim.common.init.TRDDimensions; @@ -99,4 +99,4 @@ public class RedstoneInputBlock extends BlockBaseTardimPanel implements EntityBl } else if (redstoneSignal == 0 && ((RedstoneInputTileEntity) be).isPowered) ((RedstoneInputTileEntity) be).isPowered = false; } -} +} \ No newline at end of file diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/redstone_input/RedstoneInputTileEntity.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/redstone_input/RedstoneInputTileEntity.java similarity index 94% rename from Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/redstone_input/RedstoneInputTileEntity.java rename to Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/redstone_input/RedstoneInputTileEntity.java index 091bd65..f75390c 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/redstone_input/RedstoneInputTileEntity.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/redstone_input/RedstoneInputTileEntity.java @@ -1,4 +1,4 @@ -package su.a71.tardim_ic.tardim_ic.redstone_input; +package su.a71.tardim_ic.tardim_ic.blocks.redstone_input; import com.swdteam.tardim.tileentity.TileEntityBaseTardimPanel; diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/roundels/roundels.txt b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/roundels/roundels.txt similarity index 100% rename from Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/roundels/roundels.txt rename to Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/blocks/roundels/roundels.txt diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandCloisterBell.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandCloisterBell.java index 788f8d6..eb02775 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandCloisterBell.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandCloisterBell.java @@ -12,6 +12,9 @@ import net.minecraft.world.level.Level; import su.a71.tardim_ic.tardim_ic.Registration; +/* +This command transmits the cloister bell sound in a big enough radius that you could hear it in any reasonably sized interior. + */ public class CommandCloisterBell implements ICommand { @Override public void execute(String[] args, Player player, BlockPos pos, CommandTardimBase.CommandSource source) { diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandListBiomes.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandListBiomes.java index eb6e399..146ac06 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandListBiomes.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandListBiomes.java @@ -8,9 +8,16 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.FurnaceFuelSlot; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; +import net.minecraft.world.level.block.entity.FurnaceBlockEntity; +/* +This command prints list of all biomes into the console to find technical names +You can also pass an argument to search for entries with this string (e.g. amethyst for terralith:amethyst_rainforest + */ public class CommandListBiomes implements ICommand{ @Override public void execute(String[] args, Player player, BlockPos pos, CommandTardimBase.CommandSource source) { @@ -23,7 +30,7 @@ public class CommandListBiomes implements ICommand{ biomeRegistry.keySet().forEach( (ResourceLocation res) -> { String out = res.toString(); - if (args.length == 0 || (args[0].equals(out.split(":")[0]))) { + if (args.length == 0 || out.toLowerCase().contains(args[0].toLowerCase())) { CommandTardimBase.sendResponse(player, out, CommandTardimBase.ResponseType.INFO, source); } } @@ -44,7 +51,7 @@ public class CommandListBiomes implements ICommand{ @Override public String getUsage() { - return "/list-biomes"; + return "/list-biomes <..search_query>"; // TODO: how to communicate this better } @Override diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandListDimensions.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandListDimensions.java index ead9842..d5cebda 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandListDimensions.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandListDimensions.java @@ -8,6 +8,9 @@ import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; +/* +This command prints list of all dimensions into the console to find technical names + */ public class CommandListDimensions implements ICommand{ @Override public void execute(String[] args, Player player, BlockPos pos, CommandTardimBase.CommandSource source) { @@ -15,7 +18,6 @@ public class CommandListDimensions implements ICommand{ TardimData data = TardimManager.getFromPos(pos); if (data != null) { if (data.hasPermission(player)) { - // TODO: Does this really work? for (ServerLevel serverLevel : player.getLevel().getServer().getAllLevels()) { CommandTardimBase.sendResponse(player, serverLevel.dimension().location().toString(), CommandTardimBase.ResponseType.INFO, source); } diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandModemTransmit.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandModemTransmit.java index d625d46..f7472bc 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandModemTransmit.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/command/CommandModemTransmit.java @@ -14,6 +14,11 @@ import dan200.computercraft.api.network.Packet; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; +/* +This command sends out a ComputerCraft modem signal +This could be useful for connecting advanced navigation systems into "vanilla" controls +You can specify both channels, message and even make the message go across dimensions + */ public class CommandModemTransmit implements ICommand { @Override public void execute(String[] args, Player player, BlockPos pos, CommandTardimBase.CommandSource source) { diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/FakeDigitalInterfaceTileEntity.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/FakeTardimPeripheralTileEntity.java similarity index 91% rename from Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/FakeDigitalInterfaceTileEntity.java rename to Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/FakeTardimPeripheralTileEntity.java index f39e937..173e76e 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/FakeDigitalInterfaceTileEntity.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/FakeTardimPeripheralTileEntity.java @@ -1,17 +1,17 @@ -package su.a71.tardim_ic.tardim_ic.digital_interface; +package su.a71.tardim_ic.tardim_ic.computercraft_compat; import com.swdteam.tardim.tardim.TardimData; import com.swdteam.tardim.tardim.TardimManager; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; -public class FakeDigitalInterfaceTileEntity implements IDigitalInterfaceEntity { +public class FakeTardimPeripheralTileEntity implements ITardimPeripheralTileEntity { public BlockPos blockPos; public Level level; public TardimData data; // Our TARDIM - FakeDigitalInterfaceTileEntity(BlockPos in_block, Level in_level) { + public FakeTardimPeripheralTileEntity(BlockPos in_block, Level in_level) { this.blockPos = in_block; this.level = in_level; this.data = getTardimDataInitial(); diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/ITardimPeripheralTileEntity.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/ITardimPeripheralTileEntity.java new file mode 100644 index 0000000..3485898 --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/ITardimPeripheralTileEntity.java @@ -0,0 +1,14 @@ +package su.a71.tardim_ic.tardim_ic.computercraft_compat; + +import com.swdteam.tardim.tardim.TardimData; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; + +// This is used to getPost(), getLevel() and getTardim() nicely without refactoring code to account for PeripheralProvider +// At least I believe so. Otherwise don't really remember why I don't just pass these methods to the peripherals. +public interface ITardimPeripheralTileEntity { + public BlockPos getPos(); + public Level getLevel(); + + public TardimData getTardim(); +} diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/TardimPeripheralProvider.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/TardimPeripheralProvider.java new file mode 100644 index 0000000..9561de3 --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/TardimPeripheralProvider.java @@ -0,0 +1,37 @@ +package su.a71.tardim_ic.tardim_ic.computercraft_compat; + +import com.swdteam.tardim.common.block.BlockFuelStorage; +import com.swdteam.tardim.common.block.BlockRotor; +import com.swdteam.tardim.common.block.BlockTardimScanner; +import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.api.peripheral.IPeripheralProvider; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import org.jetbrains.annotations.NotNull; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.peripherals.FuelStoragePeripheral; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.peripherals.TardimScannerPeripheral; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.peripherals.TimeRotorPeripheral; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.blocks.digital_interface.DigitalInterfaceBlock; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.peripherals.DigitalInterfacePeripheral; + +public class TardimPeripheralProvider implements IPeripheralProvider { + @Override + public IPeripheral getPeripheral(@NotNull Level level, @NotNull BlockPos blockPos, @NotNull Direction direction) { + if (level.isClientSide()) return null; // Please...? + + Block block = level.getBlockState(blockPos).getBlock(); + if (block instanceof DigitalInterfaceBlock) { + return new DigitalInterfacePeripheral(new FakeTardimPeripheralTileEntity(blockPos, level)); + } else if (block instanceof BlockFuelStorage) { + return new FuelStoragePeripheral(new FakeTardimPeripheralTileEntity(blockPos, level)); + } else if (block instanceof BlockRotor) { + return new TimeRotorPeripheral(new FakeTardimPeripheralTileEntity(blockPos, level)); + } else if (block instanceof BlockTardimScanner) { + return new TardimScannerPeripheral(new FakeTardimPeripheralTileEntity(blockPos, level)); + } + + return null; + } +} \ No newline at end of file diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceBlock.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/blocks/digital_interface/DigitalInterfaceBlock.java similarity index 91% rename from Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceBlock.java rename to Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/blocks/digital_interface/DigitalInterfaceBlock.java index b0977d9..6aec966 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceBlock.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/blocks/digital_interface/DigitalInterfaceBlock.java @@ -1,4 +1,4 @@ -package su.a71.tardim_ic.tardim_ic.digital_interface; +package su.a71.tardim_ic.tardim_ic.computercraft_compat.blocks.digital_interface; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Block; diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/blocks/digital_interface/DigitalInterfaceTileEntity.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/blocks/digital_interface/DigitalInterfaceTileEntity.java new file mode 100644 index 0000000..d7f39e4 --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/blocks/digital_interface/DigitalInterfaceTileEntity.java @@ -0,0 +1,14 @@ +package su.a71.tardim_ic.tardim_ic.computercraft_compat.blocks.digital_interface; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +import su.a71.tardim_ic.tardim_ic.registration.ComputerCraftCompat; + + +public class DigitalInterfaceTileEntity extends BlockEntity {//implements IDigitalInterfaceEntity { + public DigitalInterfaceTileEntity(BlockPos pos, BlockState state) { + super(ComputerCraftCompat.DIGITAL_TARDIM_INTERFACE_TILEENTITY, pos, state); + } +} diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfacePeripheral.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/DigitalInterfacePeripheral.java similarity index 85% rename from Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfacePeripheral.java rename to Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/DigitalInterfacePeripheral.java index d3a1d5a..c4d3b70 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfacePeripheral.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/DigitalInterfacePeripheral.java @@ -1,6 +1,5 @@ -package su.a71.tardim_ic.tardim_ic.digital_interface; +package su.a71.tardim_ic.tardim_ic.computercraft_compat.peripherals; -import com.mojang.datafixers.util.Pair; import com.swdteam.tardim.common.command.tardim.CommandTravel; import com.swdteam.tardim.common.data.DimensionMapReloadListener; import com.swdteam.tardim.common.init.TRDSounds; @@ -14,8 +13,9 @@ import com.swdteam.tardim.tardim.TardimManager; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.lua.LuaFunction; import dan200.computercraft.api.lua.ObjectLuaTable; -import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; + +import com.mojang.datafixers.util.Pair; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Holder; @@ -33,27 +33,23 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; -import org.squiddev.cobalt.Lua; + import su.a71.tardim_ic.tardim_ic.Registration; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.FakeTardimPeripheralTileEntity; import su.a71.tardim_ic.tardim_ic.utils.FakePlayer; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.*; - import static su.a71.tardim_ic.tardim_ic.Registration.LOCATION_JAMMER; +import javax.annotation.Nonnull; +import java.util.*; -public class DigitalInterfacePeripheral implements IPeripheral { - private final List connectedComputers = new ArrayList<>(); // List of computers connected to the peripheral - private final IDigitalInterfaceEntity tileEntity; // Peripheral's BlockEntity, used for accessing coordinates +public class DigitalInterfacePeripheral extends TardimPeripheral implements IPeripheral { /** * @param tileEntity the tile entity of this peripheral * @hidden */ - public DigitalInterfacePeripheral(IDigitalInterfaceEntity tileEntity) { - this.tileEntity = tileEntity; + public DigitalInterfacePeripheral(FakeTardimPeripheralTileEntity tileEntity) { + super(tileEntity); } /** Setting name for the peripheral. A computer will see it as "digital_tardim_interface_n" @@ -63,118 +59,6 @@ public class DigitalInterfacePeripheral implements IPeripheral { @Override public String getType() { return "digital_tardim_interface"; } - /** Apparently CC uses this to check if the peripheral in front of a modem is this one - * @hidden - * @param iPeripheral The peripheral to compare against. This may be {@code null}. - * @return {@code true} if the peripheral is the same as this one. - */ - @Override - public boolean equals(@Nullable IPeripheral iPeripheral) { return this == iPeripheral; } - - /** Called when a computer disconnects from the peripheral - * @hidden - * @param computer The interface to the computer that is being detached. Remember that multiple computers can be - * attached to a peripheral at once. - */ - @Override - public void detach(@Nonnull IComputerAccess computer) { connectedComputers.remove(computer); } - - /** Called when a computer connects to the peripheral - * @hidden - * @param computer The interface to the computer that is being attached. Remember that multiple computers can be - * attached to a peripheral at once. - */ - @Override - public void attach(@Nonnull IComputerAccess computer) { connectedComputers.add(computer); } - - /** - * I *think* I use this to get peripheral's world position - * @hidden - * @return - */ - public IDigitalInterfaceEntity getTileEntity() { - return tileEntity; - } - - - /** - * Get TARDIM's data, which we need for *every* function - *

- * We can't do a simple - * TardimManager.getFromPos(getTileEntity().getPos()) - *

- * because if someone attempts to call a method outside a TARDIM, this would create a new TARDIM/Point to the one with ID of 0 (Due to the way TardimSaveHandler.loadTardisData works). - * Which is obviously not what we want. - *

- * So instead we use this, and get the ability to give user a LuaException if they think that fiddling with time is funny - * This is mostly a copy of getIDForXZ function with some added checks - * - * @return TardimData of the TARDIM that the peripheral is in - * @hidden - */ - public TardimData getTardimDataInitial() { - int X = getTileEntity().getPos().getX(), Z = getTileEntity().getPos().getZ(); - - int index = 0; - int x = 0; - int y = 0; - int dx = 0; - int dy = 1; - int segment_length = 1; - int segment_passed = 0; - boolean found = false; - long timecheck = System.currentTimeMillis(); - - while(true) { - if (System.currentTimeMillis() - timecheck > 10000L) { - System.out.println("Finding ID from XZ Coordinates is taking too long!"); - break; - } - - if (X >= x * TardimManager.INTERIOR_BOUNDS - && X <= TardimManager.INTERIOR_BOUNDS + x * TardimManager.INTERIOR_BOUNDS - && Z >= y * TardimManager.INTERIOR_BOUNDS - && Z <= TardimManager.INTERIOR_BOUNDS + y * TardimManager.INTERIOR_BOUNDS) { - found = true; - break; - } - - x += dx; - y += dy; - if (++segment_passed == segment_length) { - segment_passed = 0; - int buffer = dy; - dy = -dx; - dx = buffer; - if (buffer == 0) { - ++segment_length; - } - } - - ++index; - } - - // We really don't want to access a ghost TARDIM, do we? - // If we fail checks here are not inside a TARDIM - if (!found) { - return null; - } - TardimData T = TardimManager.getTardim(index); - if (T.getCurrentLocation() == null || T.getOwnerName() == null) { - return null; - } - - return T; - } - - public TardimData getTardimData() throws LuaException { - TardimData data = this.getTileEntity().getTardim(); - if (data == null || data.getCurrentLocation() == null || data.getOwnerName() == null) { - throw new LuaException("Peripheral is not inside a TARDIM"); - } - return data; - } - // Peripheral methods =============================================================== /** @@ -397,7 +281,7 @@ public class DigitalInterfacePeripheral implements IPeripheral { */ @LuaFunction(mainThread = true) public final void home() throws LuaException { - if (this.tileEntity.getLevel().isClientSide()) { + if (this.getTileEntity().getLevel().isClientSide()) { return; } TardimData data = getTardimData(); @@ -408,7 +292,7 @@ public class DigitalInterfacePeripheral implements IPeripheral { throw new LuaException("TARDIM has no owner"); } - PlayerList playerList = this.tileEntity.getLevel().getServer().getPlayerList(); + PlayerList playerList = this.getTileEntity().getLevel().getServer().getPlayerList(); ServerPlayer player = playerList.getPlayer(uuid); if (player == null) { throw new LuaException("TARDIM owner is not online"); @@ -430,11 +314,11 @@ public class DigitalInterfacePeripheral implements IPeripheral { */ @LuaFunction(mainThread = true) public final void locatePlayer(String username) throws LuaException { - if (this.tileEntity.getLevel().isClientSide()) { + if (this.getTileEntity().getLevel().isClientSide()) { return; } - PlayerList playerList = this.tileEntity.getLevel().getServer().getPlayerList(); + PlayerList playerList = this.getTileEntity().getLevel().getServer().getPlayerList(); ServerPlayer player = playerList.getPlayerByName(username); if (player == null) { @@ -461,11 +345,11 @@ public class DigitalInterfacePeripheral implements IPeripheral { */ @LuaFunction(mainThread = true) public final ObjectLuaTable getOnlinePlayers() throws LuaException { - if (this.tileEntity.getLevel().isClientSide()) { + if (this.getTileEntity().getLevel().isClientSide()) { return null; } - PlayerList playerList = this.tileEntity.getLevel().getServer().getPlayerList(); + PlayerList playerList = this.getTileEntity().getLevel().getServer().getPlayerList(); Map players = new HashMap<>(); for (int i = 0; i < playerList.getPlayers().size(); i++) { players.put(i + 1, playerList.getPlayers().get(i).getGameProfile().getName()); diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/FuelStoragePeripheral.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/FuelStoragePeripheral.java new file mode 100644 index 0000000..9a22a02 --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/FuelStoragePeripheral.java @@ -0,0 +1,73 @@ +package su.a71.tardim_ic.tardim_ic.computercraft_compat.peripherals; + +import com.swdteam.tardim.tardim.TardimData; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.lua.LuaFunction; +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.world.phys.Vec3; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.FakeTardimPeripheralTileEntity; + +import javax.annotation.Nonnull; + + +/* +* CC Peripheral for TARDIM's fuel storage block. +* Only provides getters for the fuel parts for people who cannot afford or don't need the digital interface. + */ +public class FuelStoragePeripheral extends TardimPeripheral implements IPeripheral { + /** + * @param tileEntity the tile entity of this peripheral + * @hidden + */ + public FuelStoragePeripheral(FakeTardimPeripheralTileEntity tileEntity) { + super(tileEntity); + } + + /** Setting name for the peripheral. A computer will see it as "digital_tardim_interface_n" + * @hidden + */ + @Nonnull + @Override + public String getType() { return "tardim_fuel_storage"; } + + + // Peripheral methods =============================================================== + + /** + * Return how much fuel is left in the TARDIM + * + * @return Fuel left (Out of 100) + */ + @LuaFunction(mainThread = true) + public final double getFuel() throws LuaException { + return getTardimData().getFuel(); + } + + /** + * Get how much fuel it would take to travel to the destination + * @return Amount of fuel needed (Out of 100) + */ + @LuaFunction(mainThread = true) + public final double calculateFuelForJourney() throws LuaException { + TardimData data = getTardimData(); + + if (data.getTravelLocation() == null) return 0; + + TardimData.Location curr = data.getCurrentLocation(); + TardimData.Location dest = data.getTravelLocation(); + + double fuel = 0.0; + + if (curr.getLevel() != dest.getLevel()) + { + fuel = 10.0; + } + + Vec3 posA = new Vec3(curr.getPos().getX(), curr.getPos().getY(), curr.getPos().getZ()); + Vec3 posB = new Vec3(dest.getPos().getX(), dest.getPos().getY(), dest.getPos().getZ()); + fuel += posA.distanceTo(posB) / 100.0; + if (fuel > 100.0) fuel = 100.0; + + return fuel; + } +} \ No newline at end of file diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TardimPeripheral.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TardimPeripheral.java new file mode 100644 index 0000000..4dee2ed --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TardimPeripheral.java @@ -0,0 +1,67 @@ +package su.a71.tardim_ic.tardim_ic.computercraft_compat.peripherals; + +import com.swdteam.tardim.tardim.TardimData; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.peripheral.IComputerAccess; +import dan200.computercraft.api.peripheral.IPeripheral; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.ITardimPeripheralTileEntity; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.*; + +// Base CC peripheral for whn you need something with access to a TARDIM +public abstract class TardimPeripheral implements IPeripheral { + + private final List connectedComputers = new ArrayList<>(); // List of computers connected to the peripheral + public final ITardimPeripheralTileEntity tileEntity; // Peripheral's BlockEntity, used for accessing coordinates + /** + * @param tileEntity the tile entity of this peripheral + * @hidden + */ + public TardimPeripheral(ITardimPeripheralTileEntity tileEntity) { + this.tileEntity = tileEntity; + } + + /** Apparently CC uses this to check if the peripheral in front of a modem is this one + * @hidden + * @param iPeripheral The peripheral to compare against. This may be {@code null}. + * @return {@code true} if the peripheral is the same as this one. + */ + @Override + public boolean equals(@Nullable IPeripheral iPeripheral) { return this == iPeripheral; } + + /** Called when a computer disconnects from the peripheral + * @hidden + * @param computer The interface to the computer that is being detached. Remember that multiple computers can be + * attached to a peripheral at once. + */ + @Override + public void detach(@Nonnull IComputerAccess computer) { connectedComputers.remove(computer); } + + /** Called when a computer connects to the peripheral + * @hidden + * @param computer The interface to the computer that is being attached. Remember that multiple computers can be + * attached to a peripheral at once. + */ + @Override + public void attach(@Nonnull IComputerAccess computer) { connectedComputers.add(computer); } + + /** + * I *think* I use this to get peripheral's world position + * @hidden + * @return + */ + public ITardimPeripheralTileEntity getTileEntity() { + return tileEntity; + } + + + public TardimData getTardimData() throws LuaException { + TardimData data = this.getTileEntity().getTardim(); + if (data == null || data.getCurrentLocation() == null || data.getOwnerName() == null) { + throw new LuaException("Peripheral is not inside a TARDIM"); + } + return data; + } +} diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TardimScannerPeripheral.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TardimScannerPeripheral.java new file mode 100644 index 0000000..e4caaee --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TardimScannerPeripheral.java @@ -0,0 +1,150 @@ +package su.a71.tardim_ic.tardim_ic.computercraft_compat.peripherals; + +import com.swdteam.tardim.common.init.TardimRegistry; +import com.swdteam.tardim.tardim.TardimData; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.lua.LuaFunction; +import dan200.computercraft.api.lua.ObjectLuaTable; +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.players.PlayerList; +import net.minecraft.world.level.biome.Biome; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.FakeTardimPeripheralTileEntity; + +import javax.annotation.Nonnull; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + + +/* + * CC Peripheral for TARDIM's scanner block. + * Only provides getters for data-related (mostly table output) methods e.g. biome or companion list + * for people who cannot afford or don't need the digital interface. + */ +public class TardimScannerPeripheral extends TardimPeripheral implements IPeripheral { + /** + * @param tileEntity the tile entity of this peripheral + * @hidden + */ + public TardimScannerPeripheral(FakeTardimPeripheralTileEntity tileEntity) { + super(tileEntity); + } + + /** Setting name for the peripheral. A computer will see it as "digital_tardim_interface_n" + * @hidden + */ + @Nonnull + @Override + public String getType() { return "tardim_scanner"; } + + + // Peripheral methods =============================================================== + + /** + * Get username of the TARDIM's owner + * @return String of the owner's username + */ + @LuaFunction(mainThread = true) + public final String getOwnerName() throws LuaException { + TardimData data = getTardimData(); + return data.getOwnerName(); + } + + /** + * Get list of the TARDIM owner's companions + * @return ObjectLuaTable containing the usernames of the companions + */ + @LuaFunction(mainThread = true) + public final ObjectLuaTable getCompanions() throws LuaException { + TardimData data = getTardimData(); + Map companions = new HashMap<>(); + for (int i = 0; i < data.getCompanions().size(); i++) { + companions.put(i + 1, data.getCompanions().get(i).getUsername()); + } + return new ObjectLuaTable(companions); + } + + /** + * Get online players. Useful for making a GUI for the locate function or just a nice dashboard. + * + * @return ObjectLuaTable of the online players + */ + @LuaFunction(mainThread = true) + public final ObjectLuaTable getOnlinePlayers() throws LuaException { + if (this.tileEntity.getLevel().isClientSide()) { + return null; + } + + PlayerList playerList = this.tileEntity.getLevel().getServer().getPlayerList(); + Map players = new HashMap<>(); + for (int i = 0; i < playerList.getPlayers().size(); i++) { + players.put(i + 1, playerList.getPlayers().get(i).getGameProfile().getName()); + } + + return new ObjectLuaTable(players); + } + + /** + * Get all available TARDIM skins. Useful for making a GUI skin selection. + * + * @return ObjectLuaTable of the available skins + */ + @LuaFunction(mainThread = true) + public final ObjectLuaTable getSkins() throws LuaException { + if (this.getTileEntity().getLevel().isClientSide()) { + return null; + } + + Map skins = new HashMap<>(); + + Iterator var5 = TardimRegistry.getRegistry().keySet().iterator(); + int i = 0; + while(var5.hasNext()) { + ResourceLocation builder = (ResourceLocation)var5.next(); + TardimRegistry.TardimBuilder b = TardimRegistry.getTardimBuilder(builder); + skins.put(i + 1, b.getDisplayName()); + i++; + } + + return new ObjectLuaTable(skins); + } + + /** + * Get a table with all registered biomes' names. + * Useful for creating advanced navigation systems. + * @return ObjectLuaTable with all biomes' technical names + */ + @LuaFunction(mainThread = true) + public final ObjectLuaTable getBiomes() throws LuaException { + Map biomes = new HashMap<>(); + Registry biomeRegistry = tileEntity.getLevel().registryAccess().registryOrThrow(Registry.BIOME_REGISTRY); + Iterator biome_it = biomeRegistry.keySet().iterator(); + int i = 0; + while (biome_it.hasNext()) { + biomes.put(i + 1, biome_it.next().toString()); + i++; + } + + return new ObjectLuaTable(biomes); + } + + /** + * Get a table with all registered dimensions' names. + * Useful for creating advanced navigation systems. + * @return ObjectLuaTable with all dimensions' technical names + */ + @LuaFunction(mainThread = true) + public final ObjectLuaTable getDimensions() throws LuaException { + Iterator dim_it = this.getTileEntity().getLevel().getServer().getAllLevels().iterator(); // TODO: Does this really work? + Map dimensions = new HashMap<>(); + int i = 0; + while (dim_it.hasNext()) { + dimensions.put(i + 1, dim_it.next().dimension().location().toString()); + i++; + } + return new ObjectLuaTable(dimensions); + } +} \ No newline at end of file diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TimeRotorPeripheral.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TimeRotorPeripheral.java new file mode 100644 index 0000000..7a2d622 --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/computercraft_compat/peripherals/TimeRotorPeripheral.java @@ -0,0 +1,107 @@ +package su.a71.tardim_ic.tardim_ic.computercraft_compat.peripherals; + +import com.swdteam.tardim.tardim.TardimData; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.lua.LuaFunction; +import dan200.computercraft.api.lua.ObjectLuaTable; +import dan200.computercraft.api.peripheral.IPeripheral; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.FakeTardimPeripheralTileEntity; + +import javax.annotation.Nonnull; +import java.util.Map; + +/* + * CC Peripheral for TARDIM's time rotor block. + * Only provides getters for the flight status for people who cannot afford or don't need the digital interface. + */ +public class TimeRotorPeripheral extends TardimPeripheral implements IPeripheral { + /** + * @param tileEntity the tile entity of this peripheral + * @hidden + */ + public TimeRotorPeripheral(FakeTardimPeripheralTileEntity tileEntity) { + super(tileEntity); + } + + /** Setting name for the peripheral. A computer will see it as "digital_tardim_interface_n" + * @hidden + */ + @Nonnull + @Override + public String getType() { return "tardim_time_rotor"; } + + + // Peripheral methods =============================================================== + + /** + * Check whether the TARDIM is in flight + * @return true if in flight, false if not + */ + @LuaFunction(mainThread = true) + public final boolean isInFlight() throws LuaException { return getTardimData().isInFlight(); } + + /** + * Supposedly gets UNIX timestamp of when we entered flight + * @return UNIX timestamp if in flight, -1 if not + */ + @LuaFunction(mainThread = true) + public final long getTimeEnteredFlight() throws LuaException { + TardimData data = getTardimData(); + if (!data.isInFlight()) { + return -1; + } + return data.getTimeEnteredFlight(); + } + + /** + * Get the current location of the TARDIM + * @return ObjectLuaTable of the current location with the following keys: + *

    + *
  • dimension - String of the dimension
  • + *
  • pos - table with the keys x, y, z that hold numbers
  • + *
  • facing - String of the facing
  • + *
+ */ + @LuaFunction(mainThread = true) + public final ObjectLuaTable getCurrentLocation() throws LuaException { + TardimData.Location loc = getTardimData().getCurrentLocation(); + return new ObjectLuaTable(Map.of( + "dimension", loc.getLevel().location().toString(), + "pos", new ObjectLuaTable(Map.of( + "x", loc.getPos().getX(), + "y", loc.getPos().getY(), + "z", loc.getPos().getZ() + )), + "facing", loc.getFacing().toString() + )); + } + + /** + * Get the current location of the TARDIM + * @return if there is no destination returns null. + *

+ * Otherwise, ObjectLuaTable of the current location with the following keys: + *

    + *
  • dimension - String of the dimension
  • + *
  • pos - table with the keys x, y, z that hold numbers
  • + *
  • facing - String of the facing
  • + *
+ */ + @LuaFunction(mainThread = true) + public final ObjectLuaTable getTravelLocation() throws LuaException { + TardimData data = getTardimData(); + if (data.getTravelLocation() == null) { + data.setTravelLocation(data.getCurrentLocation()); + } + TardimData.Location loc = data.getTravelLocation(); + return new ObjectLuaTable(Map.of( + "dimension", loc.getLevel().location().toString(), + "pos", new ObjectLuaTable(Map.of( + "x", loc.getPos().getX(), + "y", loc.getPos().getY(), + "z", loc.getPos().getZ() + )), + "facing", loc.getFacing().toString() + )); + } +} \ No newline at end of file diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfacePeripheralProvider.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfacePeripheralProvider.java deleted file mode 100644 index 4b88e07..0000000 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfacePeripheralProvider.java +++ /dev/null @@ -1,22 +0,0 @@ -package su.a71.tardim_ic.tardim_ic.digital_interface; - -import dan200.computercraft.api.peripheral.IPeripheral; -import dan200.computercraft.api.peripheral.IPeripheralProvider; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.Level; -import org.jetbrains.annotations.NotNull; - -public class DigitalInterfacePeripheralProvider implements IPeripheralProvider { - @NotNull - @Override - public IPeripheral getPeripheral(@NotNull Level level, @NotNull BlockPos blockPos, @NotNull Direction direction) { - if (level.isClientSide()) return null; // Please...? - if (level.getBlockState(blockPos).getBlock() instanceof DigitalInterfaceBlock) { - return new DigitalInterfacePeripheral(new FakeDigitalInterfaceTileEntity(blockPos, level)); - } - - return null; - } -} \ No newline at end of file diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceTileEntity.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceTileEntity.java deleted file mode 100644 index bee0a9c..0000000 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/DigitalInterfaceTileEntity.java +++ /dev/null @@ -1,97 +0,0 @@ -package su.a71.tardim_ic.tardim_ic.digital_interface; - -import com.swdteam.tardim.tardim.TardimData; -import com.swdteam.tardim.tardim.TardimManager; -import net.minecraft.core.BlockPos; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; - -import su.a71.tardim_ic.tardim_ic.Registration; -import su.a71.tardim_ic.tardim_ic.registration.ComputerCraftCompat; - - -public class DigitalInterfaceTileEntity extends BlockEntity {//implements IDigitalInterfaceEntity { - //public TardimData data; // Our TARDIM - - - public DigitalInterfaceTileEntity(BlockPos pos, BlockState state) { - super(ComputerCraftCompat.DIGITAL_TARDIM_INTERFACE_TILEENTITY, pos, state); - //this.data = getTardimDataInitial(); - } - -// public BlockPos getPos() { -// return this.worldPosition; -// } -// -// @Override -// public TardimData getTardim() { -// return null; -// } - -// /** -// * The peripheral -// */ -// protected DigitalInterfacePeripheral peripheral = new DigitalInterfacePeripheral(this); - -// public TardimData getTardimDataInitial() { -// int X = this.getPos().getX(), Z = this.getPos().getZ(); -// -// int index = 0; -// int x = 0; -// int y = 0; -// int dx = 0; -// int dy = 1; -// int segment_length = 1; -// int segment_passed = 0; -// boolean found = false; -// long timecheck = System.currentTimeMillis(); -// -// while(true) { -// if (System.currentTimeMillis() - timecheck > 10000L) { -// System.out.println("Finding ID from XZ Coordinates is taking too long!"); -// break; -// } -// -// if (X >= x * TardimManager.INTERIOR_BOUNDS -// && X <= TardimManager.INTERIOR_BOUNDS + x * TardimManager.INTERIOR_BOUNDS -// && Z >= y * TardimManager.INTERIOR_BOUNDS -// && Z <= TardimManager.INTERIOR_BOUNDS + y * TardimManager.INTERIOR_BOUNDS) { -// found = true; -// break; -// } -// -// x += dx; -// y += dy; -// if (++segment_passed == segment_length) { -// segment_passed = 0; -// int buffer = dy; -// dy = -dx; -// dx = buffer; -// if (buffer == 0) { -// ++segment_length; -// } -// } -// -// ++index; -// } -// -// // We really don't want to access a ghost TARDIM, do we? -// // If we fail checks here are not inside a TARDIM -// if (!found) { -// return null; -// } -// TardimData T = TardimManager.getTardim(index); -// if (T.getCurrentLocation() == null || T.getOwnerName() == null) { -// return null; -// } -// -// return T; -// } -// -// @Override -// public void load(CompoundTag tag) { -// super.load(tag); -// this.data = getTardimDataInitial(); -// } -} diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/IDigitalInterfaceEntity.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/IDigitalInterfaceEntity.java deleted file mode 100644 index 6c94757..0000000 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/digital_interface/IDigitalInterfaceEntity.java +++ /dev/null @@ -1,12 +0,0 @@ -package su.a71.tardim_ic.tardim_ic.digital_interface; - -import com.swdteam.tardim.tardim.TardimData; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; - -public interface IDigitalInterfaceEntity { - public BlockPos getPos(); - public Level getLevel(); - - public TardimData getTardim(); -} diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/BetterFuelMapMixin.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/BetterFuelMapMixin.java new file mode 100644 index 0000000..bbaba40 --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/BetterFuelMapMixin.java @@ -0,0 +1,42 @@ +package su.a71.tardim_ic.tardim_ic.mixin; + +import com.swdteam.tardim.tardim.TardimManager; +import com.swdteam.tardim.tileentity.TileEntityFuelStorage; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import static com.swdteam.tardim.tardim.TardimManager.FUEL_MAP; + +// This mixin aims to make TARDIM fuel system less awful by allowing users to put standard furance fuel into it. +@Mixin(value = TardimManager.class, remap = false) +public class BetterFuelMapMixin { + + @Overwrite + public static boolean isFuel(Item i) { + return FUEL_MAP.containsKey(i) || AbstractFurnaceBlockEntity.getFuel().containsKey(i); + } + + @Overwrite + public static double getFuel(Item i) { + if (!isFuel(i)) { + return 0.0; + } + + if (!AbstractFurnaceBlockEntity.getFuel().containsKey(i)) { + return (Double)FUEL_MAP.get(i); + } + else + return AbstractFurnaceBlockEntity.getFuel().get(i) / 8000.0; // Adapt with coal's 1600 ticks -> 0.2 fuel + } + +// //@Inject(method = "getFuel(Lnet/minecraft/world/item/Item;)V", at = @At("TAIL")) +// @Overwrite +// public static void getFuel(Item i, CallbackInfo info) { +// LOG.info("We're in #TARDIM"); +// if (AbstractFurnaceBlockEntity.getFuel().containsKey(i)) { +// +// } +// } +} \ No newline at end of file diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/BetterFuelStorageMixin.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/BetterFuelStorageMixin.java new file mode 100644 index 0000000..a685dea --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/BetterFuelStorageMixin.java @@ -0,0 +1,52 @@ +package su.a71.tardim_ic.tardim_ic.mixin; + +import com.swdteam.tardim.common.block.BlockFuelStorage; +import com.swdteam.tardim.common.init.TRDDimensions; +import com.swdteam.tardim.tardim.TardimData; +import com.swdteam.tardim.tardim.TardimManager; +import com.swdteam.tardim.tileentity.TileEntityFuelStorage; +import net.fabricmc.loader.impl.util.log.Log; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.HopperBlock; +import net.minecraft.world.level.block.entity.HopperBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import static su.a71.tardim_ic.tardim_ic.Constants.LOG; + +@Mixin(value = TileEntityFuelStorage.class, remap = false) +public class BetterFuelStorageMixin { + + // This is rather inefficient as we iterate 2 times + // However, the hoppers are so small and this method is called so rarely that it should be fine. + @Inject(method = "serverTick(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lcom/swdteam/tardim/tileentity/TileEntityFuelStorage;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/entity/HopperBlockEntity;removeItem(II)Lnet/minecraft/world/item/ItemStack;"), + locals = LocalCapture.CAPTURE_FAILHARD) + private static void saveLavaBuckets(Level world, BlockPos pos, BlockState state, TileEntityFuelStorage blockEntity, CallbackInfo ci) { + //CAPTURE_FAILHARD: If the calculated locals are different from the expected values, throws an error. + HopperBlockEntity mixin_hopper = (HopperBlockEntity)world.getBlockEntity(blockEntity.getBlockPos().above()); + for(int j = 0; j < mixin_hopper.getContainerSize(); ++j) { + ItemStack stack = mixin_hopper.getItem(j); + double fuel = TardimManager.getFuel(stack.getItem()); + if (fuel > 0.0) { + if (stack.getItem() instanceof BucketItem) { + LOG.info("THIS IS A BUCKET"); + mixin_hopper.setItem(j, new ItemStack(stack.getItem().getCraftingRemainingItem(), 2)); + } else { + mixin_hopper.removeItem(j, 1); + } + } + } + } +} \ No newline at end of file diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/JammerMixin.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/JammerMixin.java index 633b6a6..f32227b 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/JammerMixin.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/JammerMixin.java @@ -22,14 +22,14 @@ import static su.a71.tardim_ic.tardim_ic.Registration.LOCATION_JAMMER; @Mixin(value = CommandLocate.class, remap = false) public class JammerMixin { - @Inject(method="execute()V", at=@At(value = "INVOKE", target = "Lcom/swdteam/tardim/tardim/TardimData;setTravelLocation(Lcom/swdteam/tardim/tardim/TardimData$Location;)V")) - public void execute(CallbackInfo ci) { - LOG.info("test"); -// for (ItemStack armour : player.getArmorSlots()) { -// if (armour.is(LOCATION_JAMMER)) { -// sendResponse(player, "Player's location is jammed", CommandTardimBase.ResponseType.FAIL, source); -// ci.cancel(); -// }; -// } - } +// @Inject(method="execute()V", at=@At(value = "INVOKE", target = "Lcom/swdteam/tardim/tardim/TardimData;setTravelLocation(Lcom/swdteam/tardim/tardim/TardimData$Location;)V")) +// public void execute(CallbackInfo ci) { +// LOG.info("test"); +//// for (ItemStack armour : player.getArmorSlots()) { +//// if (armour.is(LOCATION_JAMMER)) { +//// sendResponse(player, "Player's location is jammed", CommandTardimBase.ResponseType.FAIL, source); +//// ci.cancel(); +//// }; +//// } +// } } diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/CommandInit.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/CommandInit.java index 8071a5e..406069b 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/CommandInit.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/CommandInit.java @@ -5,10 +5,12 @@ import com.swdteam.tardim.common.init.CommandManager; import su.a71.tardim_ic.tardim_ic.command.CommandCloisterBell; import su.a71.tardim_ic.tardim_ic.command.CommandListBiomes; +import su.a71.tardim_ic.tardim_ic.command.CommandListDimensions; public class CommandInit { public static void init() { CommandManager.register(new CommandListBiomes()); + CommandManager.register(new CommandListDimensions()); CommandManager.register(new CommandCloisterBell()); } } diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/ComputerCraftCompat.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/ComputerCraftCompat.java index 9ba3347..52dc61e 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/ComputerCraftCompat.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/ComputerCraftCompat.java @@ -12,9 +12,9 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import su.a71.tardim_ic.tardim_ic.Constants; import su.a71.tardim_ic.tardim_ic.Registration; import su.a71.tardim_ic.tardim_ic.command.CommandModemTransmit; -import su.a71.tardim_ic.tardim_ic.digital_interface.DigitalInterfaceBlock; -import su.a71.tardim_ic.tardim_ic.digital_interface.DigitalInterfacePeripheralProvider; -import su.a71.tardim_ic.tardim_ic.digital_interface.DigitalInterfaceTileEntity; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.TardimPeripheralProvider; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.blocks.digital_interface.DigitalInterfaceBlock; +import su.a71.tardim_ic.tardim_ic.computercraft_compat.blocks.digital_interface.DigitalInterfaceTileEntity; public class ComputerCraftCompat { public static final Block DIGITAL_TARDIM_INTERFACE = new DigitalInterfaceBlock(); @@ -31,6 +31,6 @@ public class ComputerCraftCompat { Registry.register(Registry.ITEM, new ResourceLocation(Constants.MOD_ID, "digital_tardim_interface"), new BlockItem(DIGITAL_TARDIM_INTERFACE, new FabricItemSettings().tab(Registration.TARDIM_IC_TAB))); CommandManager.register(new CommandModemTransmit()); - ComputerCraftAPI.registerPeripheralProvider(new DigitalInterfacePeripheralProvider()); + ComputerCraftAPI.registerPeripheralProvider(new TardimPeripheralProvider()); } } diff --git a/Fabric/src/main/resources/mixins.tardim_ic.json b/Fabric/src/main/resources/mixins.tardim_ic.json index 6fc1843..d945634 100644 --- a/Fabric/src/main/resources/mixins.tardim_ic.json +++ b/Fabric/src/main/resources/mixins.tardim_ic.json @@ -4,6 +4,8 @@ "compatibilityLevel": "JAVA_17", "refmap": "refmap.tardim_ic.json", "mixins": [ + "BetterFuelMapMixin", + "BetterFuelStorageMixin" ], "client": [ ], diff --git a/SWD_MOMENT.txt b/SWD_MOMENT.txt index a9ac663..addca91 100644 --- a/SWD_MOMENT.txt +++ b/SWD_MOMENT.txt @@ -6,4 +6,10 @@ 5. com.swdteam.tardim.common.data.DimensionMapReloadListener has modid tutorial in public ResourceLocation getFabricId() { return new ResourceLocation("tutorial", "tardim_dimension_lookup"); - } \ No newline at end of file + } + +Andrew71's proposals: + +1. Quick-return command +2. add support for far more fuel sources via AbstractFurnaceBlockEntity.getFuel() on top of built-in TARDIM method +3. Unify package names on Forge and Fabric \ No newline at end of file diff --git a/TODO.txt b/TODO.txt index f8a0bee..82778f1 100644 --- a/TODO.txt +++ b/TODO.txt @@ -11,7 +11,7 @@ Items: Commands: Quick return - set destination to previous materialisation point. Compat: - CC - add more meaningful peripherals to things like fuel tank + CC - add more meaningful peripherals to things like fuel tank, CREATIVE INTERFACE? Create - Port to 0.5.1, add display sources to more things. Also look into mechanical TARDIM power-up Mixins: @@ -44,4 +44,8 @@ Achievements/Advancements: Put on a location jammer "I will always remember..." - Save (or maybe lock like a map?) a location cartridge \ No newline at end of file + Save (or maybe lock like a map?) a location cartridge + +Crafting recipe for floppy with tardim tutorial installer + +Power indicator for redstone interface \ No newline at end of file