From 7f813582c15810d976723c777400af55b1accbbb Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Thu, 23 Jul 2020 19:31:02 -0400 Subject: [PATCH] Add Forcefields --- .../energonrelics/EnergonRelics.java | 8 ++ .../ForcefieldProjectorBlockEntity.java | 39 +++++++ .../block/forcefield/ForcefieldBlock.java | 102 ++++++++++++++++++ .../forcefield/ForcefieldProjectorBlock.java | 35 ++++++ .../energonrelics/block/util/SimpleBlock.java | 14 ++- .../client/EnergonRelicsClient.java | 2 + .../energonrelics/config/HardcodedConfig.java | 3 + .../energonrelics/blockstates/forcefield.json | 7 ++ .../blockstates/forcefield_projector.json | 50 +++++++++ .../assets/energonrelics/lang/en_us.json | 4 +- .../models/block/forcefield.json | 6 ++ .../block/forcefield_projector_off.json | 8 ++ .../models/block/forcefield_projector_on.json | 8 ++ .../models/item/forcefield_projector.json | 3 + .../textures/block/forcefield.png | Bin 0 -> 491 bytes .../block/forcefield_projector_off.png | Bin 0 -> 733 bytes .../block/forcefield_projector_on.png | Bin 0 -> 731 bytes .../block/forcefield_projector_side.png | Bin 0 -> 651 bytes .../blocks/forcefield_projector.json | 19 ++++ 19 files changed, 303 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/ForcefieldProjectorBlockEntity.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/forcefield/ForcefieldBlock.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/forcefield/ForcefieldProjectorBlock.java create mode 100644 src/main/resources/assets/energonrelics/blockstates/forcefield.json create mode 100644 src/main/resources/assets/energonrelics/blockstates/forcefield_projector.json create mode 100644 src/main/resources/assets/energonrelics/models/block/forcefield.json create mode 100644 src/main/resources/assets/energonrelics/models/block/forcefield_projector_off.json create mode 100644 src/main/resources/assets/energonrelics/models/block/forcefield_projector_on.json create mode 100644 src/main/resources/assets/energonrelics/models/item/forcefield_projector.json create mode 100644 src/main/resources/assets/energonrelics/textures/block/forcefield.png create mode 100644 src/main/resources/assets/energonrelics/textures/block/forcefield_projector_off.png create mode 100644 src/main/resources/assets/energonrelics/textures/block/forcefield_projector_on.png create mode 100644 src/main/resources/assets/energonrelics/textures/block/forcefield_projector_side.png create mode 100644 src/main/resources/data/energonrelics/loot_tables/blocks/forcefield_projector.json diff --git a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java index 477dc30..125d8c5 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java +++ b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java @@ -4,6 +4,8 @@ import com.thebrokenrail.energonrelics.block.BlockBreakerBlock; import com.thebrokenrail.energonrelics.block.DefensiveLaserBlock; import com.thebrokenrail.energonrelics.block.LightningRodBlock; import com.thebrokenrail.energonrelics.block.VeridiumBlockBlock; +import com.thebrokenrail.energonrelics.block.forcefield.ForcefieldBlock; +import com.thebrokenrail.energonrelics.block.forcefield.ForcefieldProjectorBlock; import com.thebrokenrail.energonrelics.block.structure.StructureGeneratorBlock; import com.thebrokenrail.energonrelics.block.ThermalGlassBlock; import com.thebrokenrail.energonrelics.block.battery.ActiveBatteryControllerBlock; @@ -77,6 +79,9 @@ public class EnergonRelics implements ModInitializer { public static final SpecialRecipeSerializer DUPLICATE_NETWORK_CHIP_RECIPE = new SpecialRecipeSerializer<>(DuplicateNetworkChipRecipe::new); + public static final ForcefieldBlock FORCEFIELD_BLOCK = new ForcefieldBlock(); + public static final ForcefieldProjectorBlock FORCEFIELD_PROJECTOR_BLOCK = new ForcefieldProjectorBlock(); + @Override public void onInitialize() { NETWORK_CHIP_ITEM = Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "network_chip"), new NetworkChipItem()); @@ -117,5 +122,8 @@ public class EnergonRelics implements ModInitializer { LIGHTNING_ROD_BLOCK.register("lightning_rod"); Registry.register(Registry.RECIPE_SERIALIZER, new Identifier(NAMESPACE, "duplicate_network_chip"), DUPLICATE_NETWORK_CHIP_RECIPE); + + FORCEFIELD_BLOCK.register("forcefield"); + FORCEFIELD_PROJECTOR_BLOCK.register("forcefield_projector"); } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/ForcefieldProjectorBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/ForcefieldProjectorBlockEntity.java new file mode 100644 index 0000000..9792309 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/ForcefieldProjectorBlockEntity.java @@ -0,0 +1,39 @@ +package com.thebrokenrail.energonrelics.block.entity.forcefield; + +import com.thebrokenrail.energonrelics.EnergonRelics; +import com.thebrokenrail.energonrelics.block.forcefield.ForcefieldBlock; +import com.thebrokenrail.energonrelics.block.forcefield.ForcefieldProjectorBlock; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; +import com.thebrokenrail.energonrelics.energy.core.EnergyReceiverBlockEntity; +import com.thebrokenrail.energonrelics.energy.core.util.Action; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; + +public class ForcefieldProjectorBlockEntity extends EnergyReceiverBlockEntity { + public ForcefieldProjectorBlockEntity(BlockEntityType type) { + super(type); + } + + @Override + protected void tickEnergy() { + assert getWorld() != null; + + addAction(Action.createBlockStatePropertyAction(HardcodedConfig.FORCEFIELD_PROJECTOR_ENERGY_REQUIRED, ForcefieldProjectorBlock.POWERED, true, false, new Identifier(EnergonRelics.NAMESPACE, "forcefield_projector"))); + if (getCachedState().get(ForcefieldProjectorBlock.POWERED)) { + Direction facing = getCachedState().get(ForcefieldProjectorBlock.FACING); + BlockState state = EnergonRelics.FORCEFIELD_BLOCK.getDefaultState().with(ForcefieldBlock.FACING, facing); + for (int i = 1; i < HardcodedConfig.FORCEFIELD_MAX_SIZE + 1; i++) { + BlockPos targetPos = getPos().offset(facing, i); + BlockState targetState = getWorld().getBlockState(targetPos); + if (targetState.isAir()) { + getWorld().setBlockState(targetPos, state); + } else if (targetState.getBlock() != EnergonRelics.FORCEFIELD_BLOCK) { + break; + } + } + } + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/ForcefieldBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/ForcefieldBlock.java new file mode 100644 index 0000000..64b33e2 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/ForcefieldBlock.java @@ -0,0 +1,102 @@ +package com.thebrokenrail.energonrelics.block.forcefield; + +import com.thebrokenrail.energonrelics.EnergonRelics; +import com.thebrokenrail.energonrelics.block.util.SimpleBlock; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.Properties; +import net.minecraft.util.BlockMirror; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.BlockView; +import net.minecraft.world.WorldAccess; + +@SuppressWarnings("deprecation") +public class ForcefieldBlock extends SimpleBlock { + public static final DirectionProperty FACING = Properties.FACING; + + public ForcefieldBlock() { + super(FabricBlockSettings.copy(Blocks.BARRIER).dropsNothing().lightLevel(state -> 4).emissiveLighting((state, world, pos) -> true).nonOpaque().sounds(BlockSoundGroup.GLASS).allowsSpawning((state, world, pos, type) -> false).solidBlock((state, world, pos) -> false).suffocates((state, world, pos) -> false)); + setDefaultState(getDefaultState().with(FACING, Direction.NORTH)); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState rotate(BlockState state, BlockRotation rotation) { + return state.with(FACING, rotation.rotate(state.get(FACING))); + } + + @Override + public BlockState mirror(BlockState state, BlockMirror mirror) { + return state.rotate(mirror.getRotation(state.get(FACING))); + } + + @Override + @Environment(EnvType.CLIENT) + public float getAmbientOcclusionLightLevel(BlockState state, BlockView world, BlockPos pos) { + return 1f; + } + + @Override + public boolean isTranslucent(BlockState state, BlockView world, BlockPos pos) { + return true; + } + + @Override + protected boolean registerItem() { + return false; + } + + @Override + public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState newState, WorldAccess world, BlockPos pos, BlockPos posFrom) { + BlockState defaultState = super.getStateForNeighborUpdate(state, direction, newState, world, pos, posFrom); + Direction facing = state.get(FACING).getOpposite(); + if (direction.equals(facing)) { + boolean found = false; + for (int i = 0; i < HardcodedConfig.FORCEFIELD_MAX_SIZE + 1; i++) { + BlockPos targetPos = pos.offset(facing, i); + BlockState targetState = world.getBlockState(targetPos); + if (targetState.getBlock() == this) { + if (!facing.equals(targetState.get(FACING).getOpposite())) { + break; + } + } else if (targetState.getBlock() == EnergonRelics.FORCEFIELD_PROJECTOR_BLOCK) { + if (facing.equals(targetState.get(FACING).getOpposite()) && targetState.get(ForcefieldProjectorBlock.POWERED)) { + found = true; + } + break; + } else { + break; + } + } + return found ? defaultState : Blocks.AIR.getDefaultState(); + } else { + return defaultState; + } + } + + @Override + @Environment(EnvType.CLIENT) + public boolean isSideInvisible(BlockState state, BlockState stateFrom, Direction direction) { + return stateFrom.isOf(this) || super.isSideInvisible(state, stateFrom, direction); + } + + @Override + public PistonBehavior getPistonBehavior(BlockState state) { + return PistonBehavior.DESTROY; + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/ForcefieldProjectorBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/ForcefieldProjectorBlock.java new file mode 100644 index 0000000..4b45930 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/ForcefieldProjectorBlock.java @@ -0,0 +1,35 @@ +package com.thebrokenrail.energonrelics.block.forcefield; + +import com.thebrokenrail.energonrelics.block.entity.forcefield.ForcefieldProjectorBlockEntity; +import com.thebrokenrail.energonrelics.block.util.energy.FacingEnergyProviderBlock; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.Properties; + +import java.util.function.Function; + +public class ForcefieldProjectorBlock extends FacingEnergyProviderBlock { + public static final BooleanProperty POWERED = Properties.POWERED; + + public ForcefieldProjectorBlock() { + super(FabricBlockSettings.copy(Blocks.IRON_BLOCK)); + setDefaultState(getDefaultState().with(POWERED, false)); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + super.appendProperties(builder); + builder.add(POWERED); + } + + @Override + protected Function, BlockEntity> getFactory() { + return ForcefieldProjectorBlockEntity::new; + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/util/SimpleBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/util/SimpleBlock.java index a685ed3..4ae5f30 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/util/SimpleBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/util/SimpleBlock.java @@ -15,14 +15,20 @@ public class SimpleBlock extends Block { public void register(String name) { Registry.register(Registry.BLOCK, new Identifier(EnergonRelics.NAMESPACE, name), this); - Item.Settings settings = new Item.Settings(); - if (addToItemGroup() || FabricLoader.getInstance().isDevelopmentEnvironment()) { - settings.group(EnergonRelics.ITEM_GROUP); + if (registerItem()) { + Item.Settings settings = new Item.Settings(); + if (addToItemGroup() || FabricLoader.getInstance().isDevelopmentEnvironment()) { + settings.group(EnergonRelics.ITEM_GROUP); + } + Registry.register(Registry.ITEM, new Identifier(EnergonRelics.NAMESPACE, name), new BlockItem(this, settings)); } - Registry.register(Registry.ITEM, new Identifier(EnergonRelics.NAMESPACE, name), new BlockItem(this, settings)); } protected boolean addToItemGroup() { return true; } + + protected boolean registerItem() { + return true; + } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java b/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java index 032462e..2b3dafd 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java +++ b/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java @@ -35,8 +35,10 @@ public class EnergonRelicsClient implements ClientModInitializer { @Override public void onInitializeClient() { EnergyProviderBlock.initRenderer(); + BlockRenderLayerMap.INSTANCE.putBlock(EnergonRelics.THERMAL_GLASS_BLOCK, RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(EnergonRelics.DEFENSIVE_LASER_BLOCK, RenderLayer.getCutout()); + BlockRenderLayerMap.INSTANCE.putBlock(EnergonRelics.FORCEFIELD_BLOCK, RenderLayer.getTranslucent()); AutoConfig.register(UserConfig.class, ReloadSerializer::new); } diff --git a/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java b/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java index b85a4b9..3ac9d87 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java +++ b/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java @@ -27,4 +27,7 @@ public class HardcodedConfig { public static final long LIGHTNING_ROD_ENERGY_OUTPUT = 40000; public static final double LIGHTNING_ROD_CHANCE = 0.00005d; public static final int LIGHTNING_ROD_COOLDOWN = 5; + + public static final long FORCEFIELD_PROJECTOR_ENERGY_REQUIRED = 64; + public static final int FORCEFIELD_MAX_SIZE = 12; } diff --git a/src/main/resources/assets/energonrelics/blockstates/forcefield.json b/src/main/resources/assets/energonrelics/blockstates/forcefield.json new file mode 100644 index 0000000..a0ee0e2 --- /dev/null +++ b/src/main/resources/assets/energonrelics/blockstates/forcefield.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "energonrelics:block/forcefield" + } + } +} diff --git a/src/main/resources/assets/energonrelics/blockstates/forcefield_projector.json b/src/main/resources/assets/energonrelics/blockstates/forcefield_projector.json new file mode 100644 index 0000000..0f1d3ef --- /dev/null +++ b/src/main/resources/assets/energonrelics/blockstates/forcefield_projector.json @@ -0,0 +1,50 @@ +{ + "variants": { + "facing=down,powered=false": { + "model": "energonrelics:block/forcefield_projector_off", + "x": 90 + }, + "facing=down,powered=true": { + "model": "energonrelics:block/forcefield_projector_on", + "x": 90 + }, + "facing=east,powered=false": { + "model": "energonrelics:block/forcefield_projector_off", + "y": 90 + }, + "facing=east,powered=true": { + "model": "energonrelics:block/forcefield_projector_on", + "y": 90 + }, + "facing=north,powered=false": { + "model": "energonrelics:block/forcefield_projector_off" + }, + "facing=north,powered=true": { + "model": "energonrelics:block/forcefield_projector_on" + }, + "facing=south,powered=false": { + "model": "energonrelics:block/forcefield_projector_off", + "y": 180 + }, + "facing=south,powered=true": { + "model": "energonrelics:block/forcefield_projector_on", + "y": 180 + }, + "facing=up,powered=false": { + "model": "energonrelics:block/forcefield_projector_off", + "x": 270 + }, + "facing=up,powered=true": { + "model": "energonrelics:block/forcefield_projector_on", + "x": 270 + }, + "facing=west,powered=false": { + "model": "energonrelics:block/forcefield_projector_off", + "y": 270 + }, + "facing=west,powered=true": { + "model": "energonrelics:block/forcefield_projector_on", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/lang/en_us.json b/src/main/resources/assets/energonrelics/lang/en_us.json index 8ab64fb..b7f4686 100644 --- a/src/main/resources/assets/energonrelics/lang/en_us.json +++ b/src/main/resources/assets/energonrelics/lang/en_us.json @@ -34,5 +34,7 @@ "item.minecraft.splash_potion.effect.energonrelics.veridium_poison": "Splash Potion of Degradation", "item.minecraft.lingering_potion.effect.energonrelics.veridium_poison": "Lingering Potion of Degradation", "item.minecraft.tipped_arrow.effect.energonrelics.veridium_poison": "Arrow of Degradation", - "block.energonrelics.lightning_rod": "Lightning Rod" + "block.energonrelics.lightning_rod": "Lightning Rod", + "block.energonrelics.forcefield": "Forcefield", + "block.energonrelics.forcefield_projector": "Forcefield Projector" } \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/models/block/forcefield.json b/src/main/resources/assets/energonrelics/models/block/forcefield.json new file mode 100644 index 0000000..5a276af --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/forcefield.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "energonrelics:block/forcefield" + } +} diff --git a/src/main/resources/assets/energonrelics/models/block/forcefield_projector_off.json b/src/main/resources/assets/energonrelics/models/block/forcefield_projector_off.json new file mode 100644 index 0000000..89c0479 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/forcefield_projector_off.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "energonrelics:block/forcefield_projector_side", + "front": "energonrelics:block/forcefield_projector_off", + "side": "energonrelics:block/forcefield_projector_side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/models/block/forcefield_projector_on.json b/src/main/resources/assets/energonrelics/models/block/forcefield_projector_on.json new file mode 100644 index 0000000..3cf8217 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/forcefield_projector_on.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "energonrelics:block/forcefield_projector_side", + "front": "energonrelics:block/forcefield_projector_on", + "side": "energonrelics:block/forcefield_projector_side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/models/item/forcefield_projector.json b/src/main/resources/assets/energonrelics/models/item/forcefield_projector.json new file mode 100644 index 0000000..81f38b7 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/item/forcefield_projector.json @@ -0,0 +1,3 @@ +{ + "parent": "energonrelics:block/forcefield_projector_on" +} \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/textures/block/forcefield.png b/src/main/resources/assets/energonrelics/textures/block/forcefield.png new file mode 100644 index 0000000000000000000000000000000000000000..86ed3af01e12ce3a83bda25c693c4d379bded32a GIT binary patch literal 491 zcmVukT$KZa1i$cR+l$=5zqE{Q*@B#QX;q0=Z zC3oR`3kDuc&C+U;Tc#_WhSyW*NkHEXcvtFK{jPIz4+|UeMAxvl52Lc*xB3Ip3}^K; z^@ykd000SaNLh0L01sgR01sgSs6VG^0000YNkl-a?!x&1pwYU0svsoXnFtu002ovPDHLkV1ijU*5CjD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/energonrelics/textures/block/forcefield_projector_off.png b/src/main/resources/assets/energonrelics/textures/block/forcefield_projector_off.png new file mode 100644 index 0000000000000000000000000000000000000000..b822fbd00e7d9a27f661fc6e6f99518f1f8bc90f GIT binary patch literal 733 zcmV<30wVp1P)ukT$KZa1i$cR+l$=5zqE{Q*@B#QX;q0=Z zC3oR`3kDuc&C+U;Tc#_WhSyW*NkHEXcvtFK{jPIz4+|UeMAxvl52Lc*xB3Ip3}^K; z^@ykd000SaNLh0L01sgR01sgSs6VG^0003LNkl1vR_P|yk zukT$KZa1i$cR+l$=5zqE{Q*@B#QX;q0=Z zC3oR`3kDuc&C+U;Tc#_WhSyW*NkHEXcvtFK{jPIz4+|UeMAxvl52Lc*xB3Ip3}^K; z^@ykd000SaNLh0L01sgR01sgSs6VG^0003JNklJEP2a(J`y;GVc61$H4p?+p~aIa5$1F3?n_l)@_|q_5NHCM3ulXZHcj5qWdxR2 z3%C35bX5cEvn0{&LUcaWEwFEfr>h8T0D@^@Q@k4P)fGX^2*BCe2&dUW6(f(Us* z5WLXkdtk-E-dknSdAjUESAuWs-vr{Sfpy~7YppJTvwyukT$KZa1i$cR+l$=5zqE{Q*@B#QX;q0=Z zC3oR`3kDuc&C+U;Tc#_WhSyW*NkHEXcvtFK{jPIz4+|UeMAxvl52Lc*xB3Ip3}^K; z^@ykd000SaNLh0L01sgR01sgSs6VG^0002ONkl!Ber+ zU?*pe%o-usX&@F80SfU%%&B(-W0Q;rBXUYfT3u?uj%}07#87IjyKbdnYHwjSP@MB< l1Hp+G(8m#;jV=xt{oXG@U&T6h==%Tw002ovPDHLkV1o8oBIW=9 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/energonrelics/loot_tables/blocks/forcefield_projector.json b/src/main/resources/data/energonrelics/loot_tables/blocks/forcefield_projector.json new file mode 100644 index 0000000..5f66d7e --- /dev/null +++ b/src/main/resources/data/energonrelics/loot_tables/blocks/forcefield_projector.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "energonrelics:forcefield_projector" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file