From 719ebe09201248ed29852dac387827df9d27c37b Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Tue, 28 Jul 2020 16:38:21 -0400 Subject: [PATCH] Add Industrial Laser --- .../energonrelics/EnergonRelics.java | 14 +++- .../block/entity/BlockBreakerBlockEntity.java | 8 +- .../entity/DefensiveLaserBlockEntity.java | 4 +- .../block/entity/LightningRodBlockEntity.java | 1 + .../battery/BatteryCoreBlockEntity.java | 1 + .../forcefield/FieldProjectorBlockEntity.java | 10 ++- .../IndustrialLaserBlockEntity.java | 79 ++++++++++++++++++ .../forcefield/IndustrialLaserRegistry.java | 46 ++++++++++ .../reactor/ReactorControllerBlockEntity.java | 3 +- .../reactor/ReactorCoreBlockEntity.java | 2 + .../forcefield/IndustrialLaserBlock.java | 42 ++++++++++ .../IndustrialLaserProjectorBlock.java | 19 +++++ .../forcefield/util/AbstractFieldBlock.java | 3 +- .../forcefield/util/FieldProjectorBlock.java | 3 + .../client/EnergonRelicsClient.java | 1 + .../energonrelics/config/HardcodedConfig.java | 9 +- .../blockstates/industrial_laser.json | 7 ++ .../industrial_laser_projector.json | 50 +++++++++++ .../assets/energonrelics/lang/en_us.json | 4 +- .../models/block/industrial_laser.json | 6 ++ .../block/industrial_laser_projector_off.json | 8 ++ .../block/industrial_laser_projector_on.json | 8 ++ .../item/industrial_laser_projector.json | 3 + .../textures/block/industrial_laser.png | Bin 0 -> 491 bytes .../block/industrial_laser_projector_off.png | Bin 0 -> 723 bytes .../block/industrial_laser_projector_on.png | Bin 0 -> 713 bytes .../blocks/industrial_laser_projector.json | 19 +++++ .../blocks/tractor_beam_projector.json | 19 +++++ 28 files changed, 355 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/IndustrialLaserBlockEntity.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/IndustrialLaserRegistry.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/forcefield/IndustrialLaserBlock.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/forcefield/IndustrialLaserProjectorBlock.java create mode 100644 src/main/resources/assets/energonrelics/blockstates/industrial_laser.json create mode 100644 src/main/resources/assets/energonrelics/blockstates/industrial_laser_projector.json create mode 100644 src/main/resources/assets/energonrelics/models/block/industrial_laser.json create mode 100644 src/main/resources/assets/energonrelics/models/block/industrial_laser_projector_off.json create mode 100644 src/main/resources/assets/energonrelics/models/block/industrial_laser_projector_on.json create mode 100644 src/main/resources/assets/energonrelics/models/item/industrial_laser_projector.json create mode 100644 src/main/resources/assets/energonrelics/textures/block/industrial_laser.png create mode 100644 src/main/resources/assets/energonrelics/textures/block/industrial_laser_projector_off.png create mode 100644 src/main/resources/assets/energonrelics/textures/block/industrial_laser_projector_on.png create mode 100644 src/main/resources/data/energonrelics/loot_tables/blocks/industrial_laser_projector.json create mode 100644 src/main/resources/data/energonrelics/loot_tables/blocks/tractor_beam_projector.json diff --git a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java index d1d6477..f0d6898 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java +++ b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java @@ -6,13 +6,13 @@ import com.thebrokenrail.energonrelics.block.DefensiveLaserBlock; import com.thebrokenrail.energonrelics.block.HolographicSkyBlock; import com.thebrokenrail.energonrelics.block.LightningRodBlock; import com.thebrokenrail.energonrelics.block.forcefield.ForcefieldProjectorBlock; +import com.thebrokenrail.energonrelics.block.forcefield.IndustrialLaserProjectorBlock; +import com.thebrokenrail.energonrelics.block.forcefield.IndustrialLaserBlock; import com.thebrokenrail.energonrelics.block.forcefield.RepulsorBeamBlock; import com.thebrokenrail.energonrelics.block.forcefield.TractorBeamBlock; -import com.thebrokenrail.energonrelics.block.forcefield.util.BeamBlock; import com.thebrokenrail.energonrelics.block.forcefield.TractorBeamProjectorBlock; import com.thebrokenrail.energonrelics.block.forcefield.ForcefieldBlock; import com.thebrokenrail.energonrelics.block.misc.VeridiumBlockBlock; -import com.thebrokenrail.energonrelics.block.forcefield.util.FieldProjectorBlock; import com.thebrokenrail.energonrelics.block.structure.StructureGeneratorBlock; import com.thebrokenrail.energonrelics.block.misc.ThermalGlassBlock; import com.thebrokenrail.energonrelics.block.battery.ActiveBatteryControllerBlock; @@ -34,6 +34,7 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.Material; +import net.minecraft.block.MaterialColor; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; @@ -90,6 +91,9 @@ public class EnergonRelics implements ModInitializer { public static final SpecialRecipeSerializer DUPLICATE_NETWORK_CHIP_RECIPE = new SpecialRecipeSerializer<>(DuplicateNetworkChipRecipe::new); + public static final Material FIELD_MATERIAL = new Material.Builder(MaterialColor.CLEAR).build(); + public static final Material BEAM_MATERIAL = new Material.Builder(MaterialColor.CLEAR).replaceable().build(); + public static final ForcefieldBlock FORCEFIELD_BLOCK = new ForcefieldBlock(); public static final ForcefieldProjectorBlock FORCEFIELD_PROJECTOR_BLOCK = new ForcefieldProjectorBlock(); @@ -97,6 +101,9 @@ public class EnergonRelics implements ModInitializer { public static final RepulsorBeamBlock REPULSOR_BEAM_BLOCK = new RepulsorBeamBlock(); public static final TractorBeamProjectorBlock TRACTOR_BEAM_PROJECTOR_BLOCK = new TractorBeamProjectorBlock(); + public static final IndustrialLaserBlock INDUSTRIAL_LASER_BLOCK = new IndustrialLaserBlock(); + public static final IndustrialLaserProjectorBlock INDUSTRIAL_LASER_PROJECTOR_BLOCK = new IndustrialLaserProjectorBlock(); + private static final Identifier BEEP_SOUND_ID = new Identifier(NAMESPACE, "beep"); private static final SoundEvent BEEP_SOUND_EVENT = new SoundEvent(BEEP_SOUND_ID); @@ -152,6 +159,9 @@ public class EnergonRelics implements ModInitializer { REPULSOR_BEAM_BLOCK.register("repulsor_beam"); TRACTOR_BEAM_PROJECTOR_BLOCK.register("tractor_beam_projector"); + INDUSTRIAL_LASER_BLOCK.register("industrial_laser"); + INDUSTRIAL_LASER_PROJECTOR_BLOCK.register("industrial_laser_projector"); + Registry.register(Registry.SOUND_EVENT, BEEP_SOUND_ID, BEEP_SOUND_EVENT); CREATIVE_ENERGY_SOURCE_BLOCK.register("creative_energy_source"); diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/BlockBreakerBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/BlockBreakerBlockEntity.java index 3afadda..f92c972 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/BlockBreakerBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/BlockBreakerBlockEntity.java @@ -52,11 +52,11 @@ public class BlockBreakerBlockEntity extends EnergyReceiverBlockEntity { world.createExplosion(null, targetPos.getX() + 0.5d, targetPos.getY() + 0.5d, targetPos.getZ() + 0.5d, 0.5f, Explosion.DestructionType.NONE); Block.dropStacks(target, world, targetPos, target.getBlock().hasBlockEntity() ? world.getBlockEntity(targetPos) : null, null, new ItemStack(HardcodedConfig.BLOCK_BREAKER_ITEM)); world.breakBlock(targetPos, false); - progress = 0; - }, (world, pos, state) -> progress = 0)); + }, (world, pos, state) -> {})); + progress = 0; + } else { + progress++; } - - progress++; } } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/DefensiveLaserBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/DefensiveLaserBlockEntity.java index f477195..8ccdc43 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/DefensiveLaserBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/DefensiveLaserBlockEntity.java @@ -53,7 +53,7 @@ public class DefensiveLaserBlockEntity extends EnergyReceiverBlockEntity { } } - public class Rotation { + public static class Rotation { private float yaw = 0; private float pitch = 0; private static final String KEY = "Rotation"; @@ -97,7 +97,6 @@ public class DefensiveLaserBlockEntity extends EnergyReceiverBlockEntity { private void change(float diffYaw, float diffPitch) { setRaw(yaw + diffYaw, pitch + diffPitch); - markDirty(); } public Vec3d getRayVector() { @@ -254,6 +253,7 @@ public class DefensiveLaserBlockEntity extends EnergyReceiverBlockEntity { } } } + markDirty(); } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/LightningRodBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/LightningRodBlockEntity.java index 92699fa..59a192f 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/LightningRodBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/LightningRodBlockEntity.java @@ -70,6 +70,7 @@ public class LightningRodBlockEntity extends EnergyProviderBlockEntity implement } else { cooldown--; } + markDirty(); return super.startTick(); } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/battery/BatteryCoreBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/battery/BatteryCoreBlockEntity.java index b177ba8..9043f79 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/battery/BatteryCoreBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/battery/BatteryCoreBlockEntity.java @@ -31,5 +31,6 @@ public class BatteryCoreBlockEntity extends BlockEntity { void setEnergy(long value) { energy = value; + markDirty(); } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/FieldProjectorBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/FieldProjectorBlockEntity.java index fdec986..7b02ec2 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/FieldProjectorBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/FieldProjectorBlockEntity.java @@ -20,11 +20,18 @@ public class FieldProjectorBlockEntity extends EnergyReceiverBlockEntity { this.block = block; } + protected void setLastBlock(BlockPos pos, BlockState lastState) { + } + + protected long getCost() { + return HardcodedConfig.FIELD_PROJECTOR_ENERGY_REQUIRED; + } + @Override protected void energyTick() { assert getWorld() != null; - addAction(Action.createBlockStatePropertyAction(HardcodedConfig.FIELD_PROJECTOR_ENERGY_REQUIRED, FieldProjectorBlock.POWERED, true, false)); + addAction(Action.createBlockStatePropertyAction(getCost(), FieldProjectorBlock.POWERED, true, false)); if (getCachedState().get(FieldProjectorBlock.POWERED)) { Direction facing = getCachedState().get(FieldProjectorBlock.FACING); BlockState state = block.apply(getCachedState()).getDefaultState().with(AbstractFieldBlock.FACING, facing); @@ -34,6 +41,7 @@ public class FieldProjectorBlockEntity extends EnergyReceiverBlockEntity { if (targetState.isAir() || (targetState != state && targetState.getBlock() instanceof AbstractFieldBlock && targetState.get(AbstractFieldBlock.FACING) == facing)) { getWorld().setBlockState(targetPos, state); } else if (targetState != state) { + setLastBlock(targetPos, targetState); break; } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/IndustrialLaserBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/IndustrialLaserBlockEntity.java new file mode 100644 index 0000000..8d09e1d --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/IndustrialLaserBlockEntity.java @@ -0,0 +1,79 @@ +package com.thebrokenrail.energonrelics.block.entity.forcefield; + +import com.thebrokenrail.energonrelics.EnergonRelics; +import com.thebrokenrail.energonrelics.block.forcefield.IndustrialLaserProjectorBlock; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.explosion.Explosion; + +public class IndustrialLaserBlockEntity extends FieldProjectorBlockEntity { + private BlockPos targetPos; + private BlockState targetState; + private int progress = 0; + + public IndustrialLaserBlockEntity(BlockEntityType type) { + super(type, state -> EnergonRelics.INDUSTRIAL_LASER_BLOCK); + } + + @Override + protected void setLastBlock(BlockPos newPos, BlockState newState) { + if (!newPos.equals(targetPos) || targetState != newState) { + targetPos = newPos; + targetState = newState; + progress = 0; + } + } + + @Override + protected long getCost() { + return HardcodedConfig.INDUSTRIAL_LASER_ENERGY_REQUIRED; + } + + @Override + protected void energyTick() { + super.energyTick(); + + if (getCachedState().get(IndustrialLaserProjectorBlock.POWERED) && targetState != null && targetPos != null && IndustrialLaserRegistry.has(targetState.getBlock())) { + assert getWorld() != null; + + if (progress >= HardcodedConfig.INDUSTRIAL_LASER_BEAM_TIME) { + getWorld().createExplosion(null, targetPos.getX() + 0.5d, targetPos.getY() + 0.5d, targetPos.getZ() + 0.5d, 0.5f, Explosion.DestructionType.NONE); + Block.dropStack(getWorld(), targetPos, IndustrialLaserRegistry.get(targetState.getBlock(), getWorld().random)); + getWorld().breakBlock(targetPos, false); + + progress = 0; + } else { + Vec3d vec = Vec3d.ofCenter(targetPos); + + ((ServerWorld) getWorld()).spawnParticles(ParticleTypes.FLAME, vec.getX(), vec.getY(), vec.getZ(), 2, 0.3f, 0.3f, 0.3f, 0f); + + progress++; + } + + markDirty(); + } else if (progress != 0) { + progress = 0; + markDirty(); + } + } + + @Override + public CompoundTag toTag(CompoundTag tag) { + super.toTag(tag); + tag.putInt("Progress", progress); + return tag; + } + + @Override + public void fromTag(BlockState state, CompoundTag tag) { + super.fromTag(state, tag); + progress = tag.getInt("Progress"); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/IndustrialLaserRegistry.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/IndustrialLaserRegistry.java new file mode 100644 index 0000000..2009cc1 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/IndustrialLaserRegistry.java @@ -0,0 +1,46 @@ +package com.thebrokenrail.energonrelics.block.entity.forcefield; + +import com.thebrokenrail.energonrelics.EnergonRelics; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.function.Function; + +public class IndustrialLaserRegistry { + private static final Map> map = new HashMap<>(); + + private static void add(Block ore, Item ingot, Block storage) { + map.put(ore, random -> { + int min = HardcodedConfig.INDUSTRIAL_LASER_MIN_INGOTS_FROM_ORE; + int max = HardcodedConfig.INDUSTRIAL_LASER_MAX_INGOTS_FROM_ORE; + + int count = random.nextInt(max - min + 1) + min; + + return new ItemStack(ingot, count); + }); + map.put(storage, random -> new ItemStack(ingot, HardcodedConfig.INDUSTRIAL_LASER_INGOTS_FROM_STORAGE)); + } + + static boolean has(Block block) { + return map.containsKey(block); + } + + static ItemStack get(Block block, Random random) { + return map.get(block).apply(random); + } + + static { + add(Blocks.IRON_ORE, Items.IRON_INGOT, Blocks.IRON_BLOCK); + add(Blocks.GOLD_ORE, Items.GOLD_INGOT, Blocks.GOLD_BLOCK); + add(Blocks.DIAMOND_ORE, Items.DIAMOND, Blocks.DIAMOND_BLOCK); + add(Blocks.EMERALD_ORE, Items.EMERALD, Blocks.EMERALD_BLOCK); + add(EnergonRelics.VERIDIUM_ORE_BLOCK, EnergonRelics.VERIDIUM_INGOT_ITEM, EnergonRelics.VERIDIUM_BLOCK_BLOCK); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorControllerBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorControllerBlockEntity.java index bc8a8cc..0560e0d 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorControllerBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorControllerBlockEntity.java @@ -1,11 +1,10 @@ package com.thebrokenrail.energonrelics.block.entity.reactor; -import com.thebrokenrail.energonrelics.config.HardcodedConfig; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.battery.PassiveBatteryControllerBlock; import com.thebrokenrail.energonrelics.block.entity.battery.PassiveBatteryControllerBlockEntity; import com.thebrokenrail.energonrelics.block.reactor.ReactorControllerBlock; -import com.thebrokenrail.energonrelics.energy.core.EnergyProviderBlockEntity; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; import com.thebrokenrail.energonrelics.energy.core.util.EnergyTickable; import com.thebrokenrail.energonrelics.energy.helper.EnergyGeneratorBlockEntity; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorCoreBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorCoreBlockEntity.java index f92f28e..f0c2dc3 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorCoreBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/reactor/ReactorCoreBlockEntity.java @@ -33,12 +33,14 @@ public class ReactorCoreBlockEntity extends BlockEntity implements Tickable { void startReaction(float fuelMultiplier) { reactionTime = (int) ((float) HardcodedConfig.REACTOR_TIME * fuelMultiplier); + markDirty(); } @Override public void tick() { if (reactionTime > 0) { reactionTime--; + markDirty(); } } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/IndustrialLaserBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/IndustrialLaserBlock.java new file mode 100644 index 0000000..787c382 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/IndustrialLaserBlock.java @@ -0,0 +1,42 @@ +package com.thebrokenrail.energonrelics.block.forcefield; + +import com.thebrokenrail.energonrelics.EnergonRelics; +import com.thebrokenrail.energonrelics.block.forcefield.util.AbstractFieldBlock; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; +import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; + +public class IndustrialLaserBlock extends AbstractFieldBlock { + public IndustrialLaserBlock() { + super(false); + } + + @Override + protected BlockState getProjectorBlockState() { + return EnergonRelics.INDUSTRIAL_LASER_PROJECTOR_BLOCK.getDefaultState(); + } + + @SuppressWarnings("deprecation") + @Override + public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) { + super.onEntityCollision(state, world, pos, entity); + + if (entity instanceof LivingEntity) { + entity.damage(DamageSource.IN_FIRE, HardcodedConfig.INDUSTRIAL_LASER_BEAM_DAMAGE); + } + } + + @SuppressWarnings("deprecation") + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return VoxelShapes.empty(); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/IndustrialLaserProjectorBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/IndustrialLaserProjectorBlock.java new file mode 100644 index 0000000..158fc38 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/IndustrialLaserProjectorBlock.java @@ -0,0 +1,19 @@ +package com.thebrokenrail.energonrelics.block.forcefield; + +import com.thebrokenrail.energonrelics.block.entity.forcefield.IndustrialLaserBlockEntity; +import com.thebrokenrail.energonrelics.block.forcefield.util.FieldProjectorBlock; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; + +import java.util.function.Function; + +public class IndustrialLaserProjectorBlock extends FieldProjectorBlock { + public IndustrialLaserProjectorBlock() { + super(null); + } + + @Override + protected Function, BlockEntity> getFactory() { + return IndustrialLaserBlockEntity::new; + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/util/AbstractFieldBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/util/AbstractFieldBlock.java index c7b92cb..5f92e4e 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/util/AbstractFieldBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/util/AbstractFieldBlock.java @@ -1,5 +1,6 @@ package com.thebrokenrail.energonrelics.block.forcefield.util; +import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.entity.forcefield.FieldProjectorBlockEntity; import com.thebrokenrail.energonrelics.block.util.SimpleBlock; import com.thebrokenrail.energonrelics.config.HardcodedConfig; @@ -30,7 +31,7 @@ public abstract class AbstractFieldBlock extends SimpleBlock { public static final DirectionProperty FACING = Properties.FACING; public AbstractFieldBlock(boolean hasCollision) { - super((hasCollision ? FabricBlockSettings.copy(Blocks.BARRIER) : FabricBlockSettings.copy(Blocks.BARRIER).noCollision()).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).blockVision((state, world, pos) -> false)); + super((hasCollision ? FabricBlockSettings.of(EnergonRelics.FIELD_MATERIAL) : FabricBlockSettings.of(EnergonRelics.BEAM_MATERIAL).noCollision()).strength(-1.0F, 3600000.8F).dropsNothing().nonOpaque().lightLevel(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).blockVision((state, world, pos) -> false)); setDefaultState(getDefaultState().with(FACING, Direction.NORTH)); } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/util/FieldProjectorBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/util/FieldProjectorBlock.java index 83a6e94..39f9f7a 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/util/FieldProjectorBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/forcefield/util/FieldProjectorBlock.java @@ -33,6 +33,9 @@ public class FieldProjectorBlock extends FacingEnergyBlock { @Override protected Function, BlockEntity> getFactory() { + if (block == null) { + throw new UnsupportedOperationException(); + } return type -> new FieldProjectorBlockEntity(type, block); } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java b/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java index 63e19bb..8b742a7 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java +++ b/src/main/java/com/thebrokenrail/energonrelics/client/EnergonRelicsClient.java @@ -45,6 +45,7 @@ public class EnergonRelicsClient implements ClientModInitializer { BlockRenderLayerMap.INSTANCE.putBlock(EnergonRelics.FORCEFIELD_BLOCK, RenderLayer.getTranslucent()); BlockRenderLayerMap.INSTANCE.putBlock(EnergonRelics.TRACTOR_BEAM_BLOCK, RenderLayer.getTranslucent()); BlockRenderLayerMap.INSTANCE.putBlock(EnergonRelics.REPULSOR_BEAM_BLOCK, RenderLayer.getTranslucent()); + BlockRenderLayerMap.INSTANCE.putBlock(EnergonRelics.INDUSTRIAL_LASER_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 38b300c..4b939a4 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java +++ b/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java @@ -28,11 +28,18 @@ public class HardcodedConfig { public static final double LIGHTNING_ROD_CHANCE = 0.00005d; public static final int LIGHTNING_ROD_COOLDOWN = 5; - public static final long FIELD_PROJECTOR_ENERGY_REQUIRED = 64; + public static final long FIELD_PROJECTOR_ENERGY_REQUIRED = 31; public static final int FIELD_MAX_SIZE = 12; public static final double TRACTOR_BEAM_MOVEMENT_MULTIPLIER = 0.95d; public static final double TRACTOR_BEAM_PULL_FORCE = 0.065d; + public static final float INDUSTRIAL_LASER_BEAM_DAMAGE = 1f; + public static final long INDUSTRIAL_LASER_ENERGY_REQUIRED = 58; + public static final int INDUSTRIAL_LASER_BEAM_TIME = 126; + public static final int INDUSTRIAL_LASER_MIN_INGOTS_FROM_ORE = 1; + public static final int INDUSTRIAL_LASER_MAX_INGOTS_FROM_ORE = 3; + public static final int INDUSTRIAL_LASER_INGOTS_FROM_STORAGE = 9; + public static final long HOLOGRAPHIC_SKY_ENERGY_REQUIRED = 15; } \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/blockstates/industrial_laser.json b/src/main/resources/assets/energonrelics/blockstates/industrial_laser.json new file mode 100644 index 0000000..af58e78 --- /dev/null +++ b/src/main/resources/assets/energonrelics/blockstates/industrial_laser.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "energonrelics:block/industrial_laser" + } + } +} diff --git a/src/main/resources/assets/energonrelics/blockstates/industrial_laser_projector.json b/src/main/resources/assets/energonrelics/blockstates/industrial_laser_projector.json new file mode 100644 index 0000000..faa84d2 --- /dev/null +++ b/src/main/resources/assets/energonrelics/blockstates/industrial_laser_projector.json @@ -0,0 +1,50 @@ +{ + "variants": { + "facing=down,powered=false": { + "model": "energonrelics:block/industrial_laser_projector_off", + "x": 90 + }, + "facing=down,powered=true": { + "model": "energonrelics:block/industrial_laser_projector_on", + "x": 90 + }, + "facing=east,powered=false": { + "model": "energonrelics:block/industrial_laser_projector_off", + "y": 90 + }, + "facing=east,powered=true": { + "model": "energonrelics:block/industrial_laser_projector_on", + "y": 90 + }, + "facing=north,powered=false": { + "model": "energonrelics:block/industrial_laser_projector_off" + }, + "facing=north,powered=true": { + "model": "energonrelics:block/industrial_laser_projector_on" + }, + "facing=south,powered=false": { + "model": "energonrelics:block/industrial_laser_projector_off", + "y": 180 + }, + "facing=south,powered=true": { + "model": "energonrelics:block/industrial_laser_projector_on", + "y": 180 + }, + "facing=up,powered=false": { + "model": "energonrelics:block/industrial_laser_projector_off", + "x": 270 + }, + "facing=up,powered=true": { + "model": "energonrelics:block/industrial_laser_projector_on", + "x": 270 + }, + "facing=west,powered=false": { + "model": "energonrelics:block/industrial_laser_projector_off", + "y": 270 + }, + "facing=west,powered=true": { + "model": "energonrelics:block/industrial_laser_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 62238f7..0116d01 100644 --- a/src/main/resources/assets/energonrelics/lang/en_us.json +++ b/src/main/resources/assets/energonrelics/lang/en_us.json @@ -41,5 +41,7 @@ "block.energonrelics.holographic_sky": "Holographic Sky", "block.energonrelics.tractor_beam_projector": "Tractor Beam Projector", "block.energonrelics.tractor_beam": "Tractor Beam", - "block.energonrelics.repulsor_beam": "Repulsor Beam" + "block.energonrelics.repulsor_beam": "Repulsor Beam", + "block.energonrelics.industrial_laser_projector": "Industrial Laser Projector", + "block.energonrelics.industrial_laser": "Industrial Laser" } \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/models/block/industrial_laser.json b/src/main/resources/assets/energonrelics/models/block/industrial_laser.json new file mode 100644 index 0000000..b14e044 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/industrial_laser.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "energonrelics:block/industrial_laser" + } +} diff --git a/src/main/resources/assets/energonrelics/models/block/industrial_laser_projector_off.json b/src/main/resources/assets/energonrelics/models/block/industrial_laser_projector_off.json new file mode 100644 index 0000000..7d4270b --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/industrial_laser_projector_off.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "energonrelics:block/field_projector_side", + "front": "energonrelics:block/industrial_laser_projector_off", + "side": "energonrelics:block/field_projector_side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/models/block/industrial_laser_projector_on.json b/src/main/resources/assets/energonrelics/models/block/industrial_laser_projector_on.json new file mode 100644 index 0000000..0130baf --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/industrial_laser_projector_on.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "top": "energonrelics:block/field_projector_side", + "front": "energonrelics:block/industrial_laser_projector_on", + "side": "energonrelics:block/field_projector_side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/models/item/industrial_laser_projector.json b/src/main/resources/assets/energonrelics/models/item/industrial_laser_projector.json new file mode 100644 index 0000000..b3eaa74 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/item/industrial_laser_projector.json @@ -0,0 +1,3 @@ +{ + "parent": "energonrelics:block/industrial_laser_projector_off" +} \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/textures/block/industrial_laser.png b/src/main/resources/assets/energonrelics/textures/block/industrial_laser.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8b94e018dd1a37c0adf62e9de7747e2e8e28e6 GIT binary patch literal 491 zcmV4>^J0q!dFU9HTYR^uEFn$jd*Mp?5d|X*T$(f*78PCcvRR|EL61SdDKnZnbN|% z)FGK3Ok#uy;Uz_dRSJ{|NG(ZbfBS+zzB$&!qsd>ViXo01dGY#1tw`65)U44>^J0q!dFU9HTYR^uEFn$jd*Mp?5d|X*T$(f*78PCcvRR|EL61SdDKnZnbN|% z)FGK3Ok#uy;Uz_dRSJ{|NG(ZbfBS+zzB$&!qsd>ViXo01dGY#1tw`65)U4uX#s>v;597kG(=4pDB>U@kqmSwK* zdrA(&u$u7`%5`1mqE7|ia$piMoqtZ&8@Yph7@V&0xc`^4g z&&RTK(3~X6$|LfC8E`ike3}FJu+gJw#C@&@Lt((w5CnjMyea0}hFoHxb!mWITe;$a z?lXeWtjBf!L2SPvR~Tp?U>E=Z3OLWDE6kV}K(lTmS_QWcMM0WTgp*O{y?>KS_W(mP zu&vTLE0=C!sK9P)-vsjFf$qew*IK#&&GrdzJzX4P>z=L#IS<+yapwR4002ovPDHLk FV1iZzLd*aF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/energonrelics/textures/block/industrial_laser_projector_on.png b/src/main/resources/assets/energonrelics/textures/block/industrial_laser_projector_on.png new file mode 100644 index 0000000000000000000000000000000000000000..34eaa9109d4f5a471c76ae56895702279771c9ef GIT binary patch literal 713 zcmV;)0yh1LP)4>^J0q!dFU9HTYR^uEFn$jd*Mp?5d|X*T$(f*78PCcvRR|EL61SdDKnZnbN|% z)FGK3Ok#uy;Uz_dRSJ{|NG(ZbfBS+zzB$&!qsd>ViXo01dGY#1tw`65)U49(x2VJ~d4^F2lV) z?X9W;IHzg4nvu+a2&e{&(SZNCZFTz02SPHif-z&=mxhmo4yXPgiGPb%qn1 z?T0;mo~|OW0St^qw3nh#Rft#+fU}hmQeoQHvJ}pQjl3jD-ss9b@Je{8EILnDZsJ~o vZ|vU$;yMGX#IM&{RRCxIgtwk94)J*pk>xp;##Hq900000NkvXXu0mjf2F^R% literal 0 HcmV?d00001 diff --git a/src/main/resources/data/energonrelics/loot_tables/blocks/industrial_laser_projector.json b/src/main/resources/data/energonrelics/loot_tables/blocks/industrial_laser_projector.json new file mode 100644 index 0000000..7ced078 --- /dev/null +++ b/src/main/resources/data/energonrelics/loot_tables/blocks/industrial_laser_projector.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "energonrelics:industrial_laser_projector" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/energonrelics/loot_tables/blocks/tractor_beam_projector.json b/src/main/resources/data/energonrelics/loot_tables/blocks/tractor_beam_projector.json new file mode 100644 index 0000000..d46b0bd --- /dev/null +++ b/src/main/resources/data/energonrelics/loot_tables/blocks/tractor_beam_projector.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "energonrelics:tractor_beam_projector" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file