From 7107936a61c2ab50c92cd8dce32f6bf8b71624ea Mon Sep 17 00:00:00 2001 From: Andrew-71 Date: Sat, 13 May 2023 21:50:10 +0300 Subject: [PATCH] It's like an HRA but with your friends instead of Hiss --- .../a71/tardim_ic/tardim_ic/Registration.java | 40 ++++--------- .../DigitalInterfacePeripheral.java | 11 +++- .../jammer/LocationJammerMaterial.java | 56 +++++++++++++++++++ .../tardim_ic/mixin/JammerMixin.java | 29 ++++++++++ .../tardim_ic/registration/Exteriors.java | 53 ++++++++++++++++++ .../tardim_ic/tardim_ic/roundels/roundels.txt | 4 ++ .../SovietChronoboxTileEntity.java | 3 +- Fabric/src/main/resources/fabric.mod.json | 3 + .../src/main/resources/mixins.tardim_ic.json | 15 +++++ SWD_MOMENT.txt | 2 +- 10 files changed, 183 insertions(+), 33 deletions(-) create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/jammer/LocationJammerMaterial.java create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/JammerMixin.java create mode 100644 Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/roundels/roundels.txt create mode 100644 Fabric/src/main/resources/mixins.tardim_ic.json 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 32ccbea..882ac92 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,9 +14,8 @@ import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.datafix.fixes.References; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.*; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; @@ -31,19 +30,17 @@ import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityT import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +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.registration.CommandInit; import su.a71.tardim_ic.tardim_ic.registration.ComputerCraftCompat; +import su.a71.tardim_ic.tardim_ic.registration.Exteriors; import su.a71.tardim_ic.tardim_ic.soviet_chronobox.SovietChronoboxTileEntity; public class Registration { // Blocks - public static Block DOOR_SOVIET_CHRONOBOX; - public static Block ROOF_SOVIET_CHRONOBOX; - public static Block FLOOR_SOVIET_CHRONOBOX; - public static BlockEntityType TILE_SOVIET_CHRONOBOX; public static final Block REDSTONE_TARDIM_INPUT = new RedstoneInputBlock(); @@ -63,40 +60,23 @@ public class Registration { public static final ResourceLocation CLOISTER_SOUND = new ResourceLocation("tardim_ic:cloister"); public static SoundEvent CLOISTER_SOUND_EVENT = new SoundEvent(CLOISTER_SOUND); - public static TardimRegistry.TardimBuilder TARDIM_TYPE_SOVIET; - - private static BlockEntityType createTardimTile(String string, FabricBlockEntityTypeBuilder builder) { - Type type = Util.fetchChoiceType(References.BLOCK_ENTITY, string); - return (BlockEntityType)Registry.register(Registry.BLOCK_ENTITY_TYPE, new ResourceLocation(Constants.MOD_ID, string), builder.build(type)); - } + public static final ArmorMaterial LOCATION_JAMMER_MATERIAL = new LocationJammerMaterial(); + public static final Item LOCATION_JAMMER = new ArmorItem(LOCATION_JAMMER_MATERIAL, EquipmentSlot.CHEST, new Item.Properties().tab(TARDIM_IC_TAB)); // Register our stuff public static void register() { + Registry.register(Registry.ITEM, new ResourceLocation(Constants.MOD_ID, "location_jammer"), LOCATION_JAMMER); + if (FabricLoader.getInstance().isModLoaded("computercraft")) { - ComputerCraftCompat.register(); + ComputerCraftCompat.register(); // Register ComputerCraft-related features } + Exteriors.register(); // Register custom TARDIM exteriors 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.SOUND_EVENT, CLOISTER_SOUND, CLOISTER_SOUND_EVENT); - FLOOR_SOVIET_CHRONOBOX = Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "tardim_floor_soviet"), new BlockTardimFloor(FabricBlockSettings.of(Material.WOOD).sounds(SoundType.WOOD).strength(-1.0F, 3600000.0F).noLootTable().noOcclusion(), new BlockTardimFloor.TardimTileData() { - public BlockEntityType getType() { - return TILE_SOVIET_CHRONOBOX; - } - public BlockEntityTicker getTicker() { - return TileEntityTardim::serverTick; - } - public BlockEntity createBlockEntity(BlockPos var1, BlockState var2) { - return new SovietChronoboxTileEntity(var1, var2); - } - })); - TILE_SOVIET_CHRONOBOX = createTardimTile("tardim_soviet_chronobox", FabricBlockEntityTypeBuilder.create(SovietChronoboxTileEntity::new, new Block[]{FLOOR_SOVIET_CHRONOBOX})); - DOOR_SOVIET_CHRONOBOX = Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "tardim_door_soviet"), new BlockTardimDoors(FabricBlockSettings.of(Material.WOOD).sounds(SoundType.WOOD).strength(-1.0F, 3600000.0F).noLootTable().noOcclusion())); - ROOF_SOVIET_CHRONOBOX = Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "tardim_roof_soviet"), new BlockTardimRoof(FabricBlockSettings.of(Material.WOOD).sounds(SoundType.WOOD).strength(-1.0F, 3600000.0F).noLootTable().noOcclusion())); - TARDIM_TYPE_SOVIET = new TardimRegistry.TardimBuilder(new ResourceLocation(Constants.MOD_ID, "tardim_soviet_chronobox"), "TARDIM Soviet Chronobox", ROOF_SOVIET_CHRONOBOX, DOOR_SOVIET_CHRONOBOX, FLOOR_SOVIET_CHRONOBOX); - CommandInit.init(); } } \ No newline at end of file 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/digital_interface/DigitalInterfacePeripheral.java index a093d97..e89d3f1 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/digital_interface/DigitalInterfacePeripheral.java @@ -1,7 +1,6 @@ package su.a71.tardim_ic.tardim_ic.digital_interface; import com.mojang.datafixers.util.Pair; -import com.swdteam.tardim.common.command.tardim.CommandTardimBase; import com.swdteam.tardim.common.command.tardim.CommandTravel; import com.swdteam.tardim.common.data.DimensionMapReloadListener; import com.swdteam.tardim.common.init.TRDSounds; @@ -28,11 +27,13 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.players.PlayerList; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; 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.utils.FakePlayer; @@ -40,6 +41,8 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.*; +import static su.a71.tardim_ic.tardim_ic.Registration.LOCATION_JAMMER; + public class DigitalInterfacePeripheral implements IPeripheral { @@ -438,6 +441,12 @@ public class DigitalInterfacePeripheral implements IPeripheral { throw new LuaException("Player not found"); } + for (ItemStack armour : player.getArmorSlots()) { + if (armour.is(LOCATION_JAMMER)) { + throw new LuaException("Player location jammed"); + }; + } + ResourceKey dim = player.getCommandSenderWorld().dimension(); BlockPos pos = player.blockPosition(); diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/jammer/LocationJammerMaterial.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/jammer/LocationJammerMaterial.java new file mode 100644 index 0000000..b0d04bb --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/jammer/LocationJammerMaterial.java @@ -0,0 +1,56 @@ +package su.a71.tardim_ic.tardim_ic.jammer; + + +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; + +public class LocationJammerMaterial implements ArmorMaterial { + private static final int[] BASE_DURABILITY = new int[] {13, 15, 16, 11}; + private static final int[] PROTECTION_VALUES = new int[] {1, 1, 1, 1}; + + @Override + public int getDurabilityForSlot(EquipmentSlot slot) { + return BASE_DURABILITY[slot.getIndex()] * 33; + } + + @Override + public int getDefenseForSlot(EquipmentSlot slot) { + return PROTECTION_VALUES[slot.getIndex()]; + } + + @Override + public int getEnchantmentValue() { + return 0; + } + + @Override + public @NotNull SoundEvent getEquipSound() { + return SoundEvents.ARMOR_EQUIP_GENERIC; + } + + @Override + public @NotNull Ingredient getRepairIngredient() { + return Ingredient.of(Items.IRON_INGOT); + } + + @Override + public @NotNull String getName() { + // Must be all lowercase + return "location jammer"; + } + + @Override + public float getToughness() { + return 0.0F; + } + + @Override + public float getKnockbackResistance() { + return 0.1F; + } +} \ 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 new file mode 100644 index 0000000..cf6eb09 --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/mixin/JammerMixin.java @@ -0,0 +1,29 @@ +package su.a71.tardim_ic.tardim_ic.mixin; + +import com.swdteam.tardim.common.command.tardim.CommandLocate; +import com.swdteam.tardim.common.command.tardim.CommandTardimBase; +import dan200.computercraft.api.lua.LuaException; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +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 su.a71.tardim_ic.tardim_ic.registration.CommandInit; + +import static com.swdteam.tardim.common.command.tardim.CommandTardimBase.sendResponse; +import static su.a71.tardim_ic.tardim_ic.Registration.LOCATION_JAMMER; + +@Mixin(value = CommandLocate.class, remap = false) +public class JammerMixin { + @Inject(method="execute([Ljava/lang/String;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/core/BlockPos;Lcom/swdteam/tardim/common/command/tardim/CommandTardimBase/CommandSource;)V", at=@At(value = "INVOKE", target = "Lcom/swdteam/tardim/tardim/TardimData;setTravelLocation(Lcom/swdteam/tardim/tardim/TardimData/Location)V"), locals = LocalCapture.CAPTURE_FAILHARD) + private static void init(CallbackInfo ci, Player player, Player otherPlayer, CommandTardimBase.CommandSource source) { + for (ItemStack armour : player.getArmorSlots()) { + if (armour.is(LOCATION_JAMMER)) { + sendResponse(player, "Player's location is jammed", CommandTardimBase.ResponseType.FAIL, source); + }; + } + } +} diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/Exteriors.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/Exteriors.java index 590e76f..59d8352 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/Exteriors.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/registration/Exteriors.java @@ -1,4 +1,57 @@ package su.a71.tardim_ic.tardim_ic.registration; +import com.mojang.datafixers.types.Type; +import com.swdteam.tardim.common.block.BlockTardimDoors; +import com.swdteam.tardim.common.block.BlockTardimFloor; +import com.swdteam.tardim.common.block.BlockTardimRoof; +import com.swdteam.tardim.common.init.TardimRegistry; +import com.swdteam.tardim.tileentity.TileEntityTardim; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; +import net.minecraft.Util; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.datafix.fixes.References; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import su.a71.tardim_ic.tardim_ic.Constants; +import su.a71.tardim_ic.tardim_ic.soviet_chronobox.SovietChronoboxTileEntity; + public class Exteriors { + // Soviet Chronobox + public static TardimRegistry.TardimBuilder TARDIM_TYPE_SOVIET; + public static Block DOOR_SOVIET_CHRONOBOX; + public static Block ROOF_SOVIET_CHRONOBOX; + public static Block FLOOR_SOVIET_CHRONOBOX; + public static BlockEntityType TILE_SOVIET_CHRONOBOX; + + private static BlockEntityType createTardimTile(String string, FabricBlockEntityTypeBuilder builder) { + Type type = Util.fetchChoiceType(References.BLOCK_ENTITY, string); + return (BlockEntityType) Registry.register(Registry.BLOCK_ENTITY_TYPE, new ResourceLocation(Constants.MOD_ID, string), builder.build(type)); + } + + public static void register() { + FLOOR_SOVIET_CHRONOBOX = Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "tardim_floor_soviet"), new BlockTardimFloor(FabricBlockSettings.of(Material.WOOD).sounds(SoundType.WOOD).strength(-1.0F, 3600000.0F).noLootTable().noOcclusion(), new BlockTardimFloor.TardimTileData() { + public BlockEntityType getType() { + return TILE_SOVIET_CHRONOBOX; + } + public BlockEntityTicker getTicker() { + return TileEntityTardim::serverTick; + } + public BlockEntity createBlockEntity(BlockPos var1, BlockState var2) { + return new SovietChronoboxTileEntity(var1, var2); + } + })); + TILE_SOVIET_CHRONOBOX = createTardimTile("tardim_soviet_chronobox", FabricBlockEntityTypeBuilder.create(SovietChronoboxTileEntity::new, new Block[]{FLOOR_SOVIET_CHRONOBOX})); + DOOR_SOVIET_CHRONOBOX = Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "tardim_door_soviet"), new BlockTardimDoors(FabricBlockSettings.of(Material.WOOD).sounds(SoundType.WOOD).strength(-1.0F, 3600000.0F).noLootTable().noOcclusion())); + ROOF_SOVIET_CHRONOBOX = Registry.register(Registry.BLOCK, new ResourceLocation(Constants.MOD_ID, "tardim_roof_soviet"), new BlockTardimRoof(FabricBlockSettings.of(Material.WOOD).sounds(SoundType.WOOD).strength(-1.0F, 3600000.0F).noLootTable().noOcclusion())); + TARDIM_TYPE_SOVIET = new TardimRegistry.TardimBuilder(new ResourceLocation(Constants.MOD_ID, "tardim_soviet_chronobox"), "TARDIM Soviet Chronobox", ROOF_SOVIET_CHRONOBOX, DOOR_SOVIET_CHRONOBOX, FLOOR_SOVIET_CHRONOBOX); + + } } 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/roundels/roundels.txt new file mode 100644 index 0000000..713482e --- /dev/null +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/roundels/roundels.txt @@ -0,0 +1,4 @@ +"Base:" + * Quartz + * Deepslate + * Stone? \ No newline at end of file diff --git a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/soviet_chronobox/SovietChronoboxTileEntity.java b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/soviet_chronobox/SovietChronoboxTileEntity.java index 4e6e499..0a81513 100644 --- a/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/soviet_chronobox/SovietChronoboxTileEntity.java +++ b/Fabric/src/main/java/su/a71/tardim_ic/tardim_ic/soviet_chronobox/SovietChronoboxTileEntity.java @@ -5,9 +5,10 @@ import com.swdteam.tardim.tileentity.TileEntityTardim; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; import su.a71.tardim_ic.tardim_ic.Registration; +import su.a71.tardim_ic.tardim_ic.registration.Exteriors; public class SovietChronoboxTileEntity extends TileEntityTardim { public SovietChronoboxTileEntity(BlockPos pos, BlockState state) { - super(Registration.TILE_SOVIET_CHRONOBOX, pos, state); + super(Exteriors.TILE_SOVIET_CHRONOBOX, pos, state); } } \ No newline at end of file diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index b8939a8..dec8061 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -21,6 +21,9 @@ "su.a71.tardim_ic.tardim_ic.TardimInControl" ] }, + "mixins": [ + "mixins.tardim_ic.json" + ], "depends": { "fabricloader": ">=0.14.10", diff --git a/Fabric/src/main/resources/mixins.tardim_ic.json b/Fabric/src/main/resources/mixins.tardim_ic.json new file mode 100644 index 0000000..f2465f8 --- /dev/null +++ b/Fabric/src/main/resources/mixins.tardim_ic.json @@ -0,0 +1,15 @@ +{ + "required": true, + "package": "su.a71.tardim_ic.tardim_ic.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "refmap.tardim_ic.json", + "mixins": [ + "JammerMixin" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + }, + "minVersion": "0.8.4" +} \ No newline at end of file diff --git a/SWD_MOMENT.txt b/SWD_MOMENT.txt index cb9226a..40aaade 100644 --- a/SWD_MOMENT.txt +++ b/SWD_MOMENT.txt @@ -1,4 +1,4 @@ === HOW MANY PROBLEMS TARDIM HAS?! === 1. A few log messages definitely left from testing (e.g. aklfjsjsfw) -2. isValidFlightPath is private of Fabric +2. isValidFlightPath is private on Fabric 3. FABRIC AND FORGE HAVE DIFFERENT JAVA IMPORT PATHS \ No newline at end of file