It's like an HRA but with your friends instead of Hiss

This commit is contained in:
Andrew-71 2023-05-13 21:50:10 +03:00
parent 9a23bc0752
commit 7107936a61
10 changed files with 183 additions and 33 deletions

View file

@ -14,9 +14,8 @@ import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.util.datafix.fixes.References; import net.minecraft.util.datafix.fixes.References;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.*;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.entity.BlockEntity; 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.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; 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.RedstoneInputBlock;
import su.a71.tardim_ic.tardim_ic.redstone_input.RedstoneInputTileEntity; 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.Constants;
import su.a71.tardim_ic.tardim_ic.registration.CommandInit; 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.ComputerCraftCompat;
import su.a71.tardim_ic.tardim_ic.registration.Exteriors;
import su.a71.tardim_ic.tardim_ic.soviet_chronobox.SovietChronoboxTileEntity; import su.a71.tardim_ic.tardim_ic.soviet_chronobox.SovietChronoboxTileEntity;
public class Registration { public class Registration {
// Blocks // Blocks
public static Block DOOR_SOVIET_CHRONOBOX;
public static Block ROOF_SOVIET_CHRONOBOX;
public static Block FLOOR_SOVIET_CHRONOBOX;
public static BlockEntityType<TileEntityTardim> TILE_SOVIET_CHRONOBOX;
public static final Block REDSTONE_TARDIM_INPUT = new RedstoneInputBlock(); 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 final ResourceLocation CLOISTER_SOUND = new ResourceLocation("tardim_ic:cloister");
public static SoundEvent CLOISTER_SOUND_EVENT = new SoundEvent(CLOISTER_SOUND); public static SoundEvent CLOISTER_SOUND_EVENT = new SoundEvent(CLOISTER_SOUND);
public static TardimRegistry.TardimBuilder TARDIM_TYPE_SOVIET; 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));
private static <T extends BlockEntity> BlockEntityType<T> createTardimTile(String string, FabricBlockEntityTypeBuilder<T> 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));
}
// Register our stuff // Register our stuff
public static void register() { public static void register() {
Registry.register(Registry.ITEM, new ResourceLocation(Constants.MOD_ID, "location_jammer"), LOCATION_JAMMER);
if (FabricLoader.getInstance().isModLoaded("computercraft")) { 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.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.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); 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<TileEntityTardim> getType() {
return TILE_SOVIET_CHRONOBOX;
}
public BlockEntityTicker<? super TileEntityTardim> 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(); CommandInit.init();
} }
} }

View file

@ -1,7 +1,6 @@
package su.a71.tardim_ic.tardim_ic.digital_interface; package su.a71.tardim_ic.tardim_ic.digital_interface;
import com.mojang.datafixers.util.Pair; 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.command.tardim.CommandTravel;
import com.swdteam.tardim.common.data.DimensionMapReloadListener; import com.swdteam.tardim.common.data.DimensionMapReloadListener;
import com.swdteam.tardim.common.init.TRDSounds; 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.server.players.PlayerList;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource; import net.minecraft.sounds.SoundSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraft.world.phys.Vec3; 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.Registration;
import su.a71.tardim_ic.tardim_ic.utils.FakePlayer; import su.a71.tardim_ic.tardim_ic.utils.FakePlayer;
@ -40,6 +41,8 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.*; import java.util.*;
import static su.a71.tardim_ic.tardim_ic.Registration.LOCATION_JAMMER;
public class DigitalInterfacePeripheral implements IPeripheral { public class DigitalInterfacePeripheral implements IPeripheral {
@ -438,6 +441,12 @@ public class DigitalInterfacePeripheral implements IPeripheral {
throw new LuaException("Player not found"); throw new LuaException("Player not found");
} }
for (ItemStack armour : player.getArmorSlots()) {
if (armour.is(LOCATION_JAMMER)) {
throw new LuaException("Player location jammed");
};
}
ResourceKey<Level> dim = player.getCommandSenderWorld().dimension(); ResourceKey<Level> dim = player.getCommandSenderWorld().dimension();
BlockPos pos = player.blockPosition(); BlockPos pos = player.blockPosition();

View file

@ -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;
}
}

View file

@ -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);
};
}
}
}

View file

@ -1,4 +1,57 @@
package su.a71.tardim_ic.tardim_ic.registration; 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 { 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<TileEntityTardim> TILE_SOVIET_CHRONOBOX;
private static <T extends BlockEntity> BlockEntityType<T> createTardimTile(String string, FabricBlockEntityTypeBuilder<T> 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<TileEntityTardim> getType() {
return TILE_SOVIET_CHRONOBOX;
}
public BlockEntityTicker<? super TileEntityTardim> 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);
}
} }

View file

@ -0,0 +1,4 @@
"Base:"
* Quartz
* Deepslate
* Stone?

View file

@ -5,9 +5,10 @@ import com.swdteam.tardim.tileentity.TileEntityTardim;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import su.a71.tardim_ic.tardim_ic.Registration; import su.a71.tardim_ic.tardim_ic.Registration;
import su.a71.tardim_ic.tardim_ic.registration.Exteriors;
public class SovietChronoboxTileEntity extends TileEntityTardim { public class SovietChronoboxTileEntity extends TileEntityTardim {
public SovietChronoboxTileEntity(BlockPos pos, BlockState state) { public SovietChronoboxTileEntity(BlockPos pos, BlockState state) {
super(Registration.TILE_SOVIET_CHRONOBOX, pos, state); super(Exteriors.TILE_SOVIET_CHRONOBOX, pos, state);
} }
} }

View file

@ -21,6 +21,9 @@
"su.a71.tardim_ic.tardim_ic.TardimInControl" "su.a71.tardim_ic.tardim_ic.TardimInControl"
] ]
}, },
"mixins": [
"mixins.tardim_ic.json"
],
"depends": { "depends": {
"fabricloader": ">=0.14.10", "fabricloader": ">=0.14.10",

View file

@ -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"
}

View file

@ -1,4 +1,4 @@
=== HOW MANY PROBLEMS TARDIM HAS?! === === HOW MANY PROBLEMS TARDIM HAS?! ===
1. A few log messages definitely left from testing (e.g. aklfjsjsfw) 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 3. FABRIC AND FORGE HAVE DIFFERENT JAVA IMPORT PATHS