From 192fab32ff5ce99a896bbe9723d81b18563b6950 Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Wed, 29 Jul 2020 22:51:29 -0400 Subject: [PATCH] WIP Infuser --- .../energonrelics/EnergonRelics.java | 5 + .../block/BlockBreakerBlock.java | 2 +- .../block/CreativeEnergySourceBlock.java | 2 +- .../energonrelics/block/InfuserBlock.java | 78 ++++++++++++++ .../block/entity/infuser/InfuserAction.java | 38 +++++++ .../entity/infuser/InfuserBlockEntity.java | 97 ++++++++++++++++++ .../block/entity/infuser/InfuserEntry.java | 37 +++++++ .../block/entity/infuser/InfuserRegistry.java | 46 +++++++++ .../energonrelics/config/HardcodedConfig.java | 2 + .../energonrelics/blockstates/infuser.json | 10 ++ .../assets/energonrelics/lang/en_us.json | 3 +- .../models/block/infuser_off.json | 6 ++ .../models/block/infuser_on.json | 6 ++ .../energonrelics/models/item/infuser.json | 3 + .../textures/block/infuser_off.png | Bin 0 -> 7584 bytes .../textures/block/infuser_on.png | Bin 0 -> 2901 bytes .../loot_tables/blocks/infuser.json | 19 ++++ .../data/energonrelics/recipes/infuser.json | 23 +++++ 18 files changed, 374 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/InfuserBlock.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserAction.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserBlockEntity.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserEntry.java create mode 100644 src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserRegistry.java create mode 100644 src/main/resources/assets/energonrelics/blockstates/infuser.json create mode 100644 src/main/resources/assets/energonrelics/models/block/infuser_off.json create mode 100644 src/main/resources/assets/energonrelics/models/block/infuser_on.json create mode 100644 src/main/resources/assets/energonrelics/models/item/infuser.json create mode 100644 src/main/resources/assets/energonrelics/textures/block/infuser_off.png create mode 100644 src/main/resources/assets/energonrelics/textures/block/infuser_on.png create mode 100644 src/main/resources/data/energonrelics/loot_tables/blocks/infuser.json create mode 100644 src/main/resources/data/energonrelics/recipes/infuser.json diff --git a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java index 8804a48..1d33fb2 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java +++ b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java @@ -4,6 +4,7 @@ import com.thebrokenrail.energonrelics.block.BlockBreakerBlock; import com.thebrokenrail.energonrelics.block.CreativeEnergySourceBlock; import com.thebrokenrail.energonrelics.block.DefensiveLaserBlock; import com.thebrokenrail.energonrelics.block.HolographicSkyBlock; +import com.thebrokenrail.energonrelics.block.InfuserBlock; import com.thebrokenrail.energonrelics.block.lightning.LightningRodBaseBlock; import com.thebrokenrail.energonrelics.block.forcefield.ForcefieldProjectorBlock; import com.thebrokenrail.energonrelics.block.forcefield.laser.IndustrialLaserProjectorBlock; @@ -113,6 +114,8 @@ public class EnergonRelics implements ModInitializer { public static final HolographicSkyBlock HOLOGRAPHIC_SKY_BLOCK = new HolographicSkyBlock(); + public static final InfuserBlock INFUSER_BLOCK = new InfuserBlock(); + @Override public void onInitialize() { NETWORK_CHIP_ITEM = Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "network_chip"), new NetworkChipItem()); @@ -170,6 +173,8 @@ public class EnergonRelics implements ModInitializer { CREATIVE_ENERGY_SOURCE_BLOCK.register("creative_energy_source"); HOLOGRAPHIC_SKY_BLOCK.register("holographic_sky"); + + INFUSER_BLOCK.register("infuser"); } public static void playBeep(World world, BlockPos pos) { diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/BlockBreakerBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/BlockBreakerBlock.java index 8f47d38..bcd3d1d 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/BlockBreakerBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/BlockBreakerBlock.java @@ -21,7 +21,7 @@ public class BlockBreakerBlock extends FacingEnergyBlock { public static final BooleanProperty POWERED = Properties.POWERED; public BlockBreakerBlock() { - super(FabricBlockSettings.copy(Blocks.BLACKSTONE).strength(2f, 6f).nonOpaque().lightLevel(state -> state.get(POWERED) ? 7 : 0)); + super(FabricBlockSettings.copy(Blocks.POLISHED_BLACKSTONE_BRICKS).nonOpaque().lightLevel(state -> state.get(POWERED) ? 7 : 0)); setDefaultState(getDefaultState().with(POWERED, false)); } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/CreativeEnergySourceBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/CreativeEnergySourceBlock.java index ed0c4ce..606b6db 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/CreativeEnergySourceBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/CreativeEnergySourceBlock.java @@ -11,7 +11,7 @@ import java.util.function.Function; public class CreativeEnergySourceBlock extends EnergyBlock { public CreativeEnergySourceBlock() { - super(FabricBlockSettings.copy(Blocks.BEDROCK).dropsNothing()); + super(FabricBlockSettings.copy(Blocks.BEDROCK).dropsNothing().lightLevel(state -> 12)); } @Override diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/InfuserBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/InfuserBlock.java new file mode 100644 index 0000000..8dbeced --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/InfuserBlock.java @@ -0,0 +1,78 @@ +package com.thebrokenrail.energonrelics.block; + +import com.thebrokenrail.energonrelics.block.entity.infuser.InfuserBlockEntity; +import com.thebrokenrail.energonrelics.block.util.energy.EnergyBlock; +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.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.Properties; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import java.util.function.Function; + +public class InfuserBlock extends EnergyBlock { + public static final BooleanProperty POWERED = Properties.POWERED; + + public InfuserBlock() { + super(FabricBlockSettings.copy(Blocks.GOLD_BLOCK).nonOpaque().lightLevel(state -> state.get(POWERED) ? 7 : 0).emissiveLighting((state, world, pos) -> state.get(POWERED))); + setDefaultState(getDefaultState().with(POWERED, false)); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + super.appendProperties(builder); + builder.add(POWERED); + } + + @Override + protected Function, BlockEntity> getFactory() { + return InfuserBlockEntity::new; + } + + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + boolean success; + + BlockEntity entity = world.getBlockEntity(pos); + if (entity instanceof InfuserBlockEntity) { + ItemStack stack = player.getStackInHand(hand); + if (((InfuserBlockEntity) entity).insert(stack.getItem())) { + if (!player.isCreative()) { + stack.decrement(1); + } + success = true; + } else { + success = false; + } + } else { + success = false; + } + + if (success) { + return ActionResult.SUCCESS; + } else { + return super.onUse(state, world, pos, player, hand, hit); + } + } + + @Override + public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) { + super.onBreak(world, pos, state, player); + + BlockEntity entity = world.getBlockEntity(pos); + if (entity instanceof InfuserBlockEntity) { + ((InfuserBlockEntity) entity).onBreak(); + } + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserAction.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserAction.java new file mode 100644 index 0000000..4723d5e --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserAction.java @@ -0,0 +1,38 @@ +package com.thebrokenrail.energonrelics.block.entity.infuser; + +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.explosion.Explosion; + +interface InfuserAction { + void run(World world, BlockPos pos); + + class ItemAction implements InfuserAction { + private final ItemStack stack; + + ItemAction(ItemStack stack) { + this.stack = stack; + } + + ItemAction(Item item) { + this(new ItemStack(item)); + } + + @Override + public void run(World world, BlockPos pos) { + Block.dropStack(world, pos, stack); + } + } + + class ExplosionAction implements InfuserAction { + @Override + public void run(World world, BlockPos pos) { + world.setBlockState(pos, Blocks.AIR.getDefaultState()); + world.createExplosion(null, pos.getX() + 0.5d, pos.getY() + 0.5d, pos.getZ() + 0.5d, 3f, true, Explosion.DestructionType.DESTROY); + } + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserBlockEntity.java new file mode 100644 index 0000000..31c0c73 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserBlockEntity.java @@ -0,0 +1,97 @@ +package com.thebrokenrail.energonrelics.block.entity.infuser; + +import com.thebrokenrail.energonrelics.block.InfuserBlock; +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.item.Item; +import net.minecraft.nbt.CompoundTag; + +import java.util.Objects; + +public class InfuserBlockEntity extends EnergyReceiverBlockEntity { + public InfuserBlockEntity(BlockEntityType type) { + super(type); + } + + private InfuserEntry entry = null; + private int progress = 0; + + private static final InfuserAction explosion = new InfuserAction.ExplosionAction(); + + @Override + protected void energyTick() { + assert getWorld() != null; + + if (getCachedState().get(InfuserBlock.POWERED)) { + if (entry != null) { + if (progress >= HardcodedConfig.INFUSER_TIME) { + getWorld().setBlockState(getPos(), getCachedState().with(InfuserBlock.POWERED, false)); + + entry.run(Objects.requireNonNull(getWorld()), getPos()); + + progress = 0; + entry = null; + markDirty(); + } else { + addAction(new Action(entry.cost, (world, pos, state) -> { + progress++; + markDirty(); + }, (world, pos, state) -> explosion.run(world, pos))); + } + } else { + explosion.run(getWorld(), getPos()); + } + } else { + if (progress != 0 || entry != null) { + progress = 0; + entry = null; + markDirty(); + } + } + } + + @Override + public CompoundTag toTag(CompoundTag tag) { + super.toTag(tag); + tag.putString("Entry", InfuserRegistry.toString(entry)); + tag.putInt("Progress", progress); + return tag; + } + + @Override + public void fromTag(BlockState state, CompoundTag tag) { + super.fromTag(state, tag); + entry = InfuserRegistry.fromString(tag.getString("Entry")); + progress = tag.getInt("Progress"); + } + + public boolean insert(Item item) { + assert getWorld() != null; + + if (getCachedState().get(InfuserBlock.POWERED)) { + return false; + } else { + InfuserEntry newEntry = InfuserRegistry.get(item); + if (newEntry != null) { + if (!getWorld().isClient()) { + getWorld().setBlockState(getPos(), getCachedState().with(InfuserBlock.POWERED, true)); + entry = newEntry; + progress = 0; + markDirty(); + } + return true; + } else { + return false; + } + } + } + + public void onBreak() { + if (getCachedState().get(InfuserBlock.POWERED)) { + explosion.run(getWorld(), getPos()); + } + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserEntry.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserEntry.java new file mode 100644 index 0000000..6779e60 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserEntry.java @@ -0,0 +1,37 @@ +package com.thebrokenrail.energonrelics.block.entity.infuser; + +import com.thebrokenrail.energonrelics.util.WeightedList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +class InfuserEntry { + public final long cost; + public final double successChance; + public final InfuserAction[] success; + public final InfuserAction[] fail; + + InfuserEntry(long cost, double successChance, InfuserAction[] success, InfuserAction[] fail) { + this.cost = cost; + this.successChance = successChance; + this.success = success; + this.fail = fail; + } + + void run(World world, BlockPos pos) { + boolean isSuccess = world.random.nextDouble() <= successChance; + + InfuserAction[] list; + if (isSuccess) { + list = success; + } else { + list = fail; + } + + WeightedList weightedList = new WeightedList<>(); + for (InfuserAction action : list) { + weightedList.add(1, action); + } + + weightedList.pick(world.random).run(world, pos); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserRegistry.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserRegistry.java new file mode 100644 index 0000000..3469dbb --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserRegistry.java @@ -0,0 +1,46 @@ +package com.thebrokenrail.energonrelics.block.entity.infuser; + +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.HashMap; +import java.util.Map; + +public class InfuserRegistry { + private static final Map map = new HashMap<>(); + + static InfuserEntry get(Item item) { + return map.get(item); + } + + private static void add(Item item, InfuserEntry entry) { + map.put(item, entry); + } + + static String toString(InfuserEntry entry) { + Item item = null; + for (Map.Entry mapEntry : map.entrySet()) { + if (mapEntry.getValue() == entry) { + item = mapEntry.getKey(); + break; + } + } + + if (item != null) { + return Registry.ITEM.getId(item).toString(); + } else { + return ""; + } + } + + static InfuserEntry fromString(String str) { + Item item = Registry.ITEM.get(new Identifier(str)); + return map.getOrDefault(item, null); + } + + static { + add(Items.SUGAR, new InfuserEntry(51, 0.76d, new InfuserAction[]{new InfuserAction.ItemAction(Items.GLOWSTONE_DUST)}, new InfuserAction[]{new InfuserAction.ItemAction(Items.SUGAR_CANE), new InfuserAction.ExplosionAction()})); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java b/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java index 3f50750..48928e9 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java +++ b/src/main/java/com/thebrokenrail/energonrelics/config/HardcodedConfig.java @@ -42,4 +42,6 @@ public class HardcodedConfig { public static final int INDUSTRIAL_LASER_INGOTS_FROM_STORAGE = 9; public static final long HOLOGRAPHIC_SKY_ENERGY_REQUIRED = 15; + + public static final int INFUSER_TIME = 160; } \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/blockstates/infuser.json b/src/main/resources/assets/energonrelics/blockstates/infuser.json new file mode 100644 index 0000000..02c09e2 --- /dev/null +++ b/src/main/resources/assets/energonrelics/blockstates/infuser.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "energonrelics:block/infuser_off" + }, + "powered=true": { + "model": "energonrelics:block/infuser_on" + } + } +} diff --git a/src/main/resources/assets/energonrelics/lang/en_us.json b/src/main/resources/assets/energonrelics/lang/en_us.json index fcfa0b7..7064442 100644 --- a/src/main/resources/assets/energonrelics/lang/en_us.json +++ b/src/main/resources/assets/energonrelics/lang/en_us.json @@ -45,5 +45,6 @@ "block.energonrelics.industrial_laser_projector": "Industrial Laser Projector", "block.energonrelics.industrial_laser": "Industrial Laser", "death.attack.energonrelics.industrial_laser": "%s was melted by an industrial laser", - "death.attack.energonrelics.industrial_laser.player": "%s was melted by an industrial laser whilst fighting %s" + "death.attack.energonrelics.industrial_laser.player": "%s was melted by an industrial laser whilst fighting %s", + "block.energonrelics.infuser": "Infuser" } \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/models/block/infuser_off.json b/src/main/resources/assets/energonrelics/models/block/infuser_off.json new file mode 100644 index 0000000..a520bc1 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/infuser_off.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "energonrelics:block/infuser_off" + } +} diff --git a/src/main/resources/assets/energonrelics/models/block/infuser_on.json b/src/main/resources/assets/energonrelics/models/block/infuser_on.json new file mode 100644 index 0000000..8cc43f8 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/block/infuser_on.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "energonrelics:block/infuser_on" + } +} diff --git a/src/main/resources/assets/energonrelics/models/item/infuser.json b/src/main/resources/assets/energonrelics/models/item/infuser.json new file mode 100644 index 0000000..f0d4377 --- /dev/null +++ b/src/main/resources/assets/energonrelics/models/item/infuser.json @@ -0,0 +1,3 @@ +{ + "parent": "energonrelics:block/infuser_off" +} diff --git a/src/main/resources/assets/energonrelics/textures/block/infuser_off.png b/src/main/resources/assets/energonrelics/textures/block/infuser_off.png new file mode 100644 index 0000000000000000000000000000000000000000..0989bde3f6e923ce7c3d39bdbcf02180777c4d9e GIT binary patch literal 7584 zcmd5>2~ZSQ8XnO>=`bSdg1RE7R}^;Ubx-&7CZGr=DAx$WiVE7yu?%Ar7sPvAR3hp| zJcuTWmd5*J*HY9~1A>Cam0(1vSaO6i3q*rU6o@gz{a?=vOals|lx|P;>wd@o{oj9L zwQH3jA4-TJgh(WkObYN1gJ(Z{_pyf2`SEj3BdflzGpqmRomom~KNJyHPTEVv-huU+^vB|n?zWZrJBx#s z)BSC3B`+)I!W)ujHpJ&-eP1(af3RdubYA%Oxf!W{UY-9y6J4L3kh3*#-)g(m=8uOe zf1X@>&3fFJBKqg(f7-7vN{McGqJEz6lbxR3>+=4Hho1Mx+&3jAiS8nRq;)^i;{;YjjV4ni^5} z{4qst8SqKn36~_Fs5?9CGT&2XMcpagq`94bslJcnl><2*Z19S-7=3(s&xCn--)h1G z>++sD*!tAixYxV0>bvCNMc%39iYH~`n>vtuT#rNJ4(cEr=aVK*OA6x_x+MH%o>n(UX!U$wSHUg4ZGfzg7K?8dgsb#>Gw2UU{SX$0d zNJ=AGPBV}|8d44Z(8k8bY7v5UmZtEEoFV0unv_y%a3l$5A=wB@!Eg)+%1MT!G;)fD zCjgQp2q8pjNsW{vRg8k>8H%7~i~^~#L3rQ5!<-4w z0N;Y=5X~}DFpUK#Xn>iKDYylJN;xpXHbY3j5W`R4L@Wpw?@5I@dtSAs)w=|k01l(o zV3<(|8^iky9NjTIaOAs-IXq$TPFws|c#}|P@Bn1U4|DX+z(GRBNQKaZ(Jv-naB_tl z@&eqerBw`0J>I!k4K8@_I`kTdFfMPV)pQ&+gEKjbg(Q?gVaVmUI3Ou#g;AU~7ifQ; zQbCbu2%70kq$7rM5QTK$BMuxPDD6#SI}+^7G^l=KAURw$P=Zi7P`-vFynYM8Tf3a5H&w5!E{HB@xotcl%6DCtS?mMPF*=n+(Q{r`A zT}v+~Ox;=NKtlyuG8!}65|NJ2b_);=Rkr|Pj&B>tJnsxXd)tiKN3P3^+8ZMT>oSl~ zto`gw0Ci@Jkky-DB-Gg1Ou)!8V}#HGAmNr}vu*-v`Ach=_Kr?>6QkE?BW(lo_8GPH zlLd_08Y6_V07xj(B;2%Q)_p*)Zj6v`_c0RU zS~3&b^8dg{$lfAGLStS7NGK|tS;R;vDx7r!^fF^C0umm6*{l;rFB28+wFBz9F`WPj zx4S-T$EfR~!jk~>s>ZYf5-z;z?6piYx8=2f%-O#!Aai5P`Mk!zkAyI966nRo2syni zXA4=F&pKe#Rb$LycxU5p3LSik#vi}w9t z8H@XPRR-Fj&1qbX^@ZY|;kLdt`O@Ho=~niB9`1wktZuPE`Q!Voj+o*{NdV#wWO+P_Y@iV=()1r z$3IFMrX@Q4!!h+()sR&g{nw;F%&V!byL>R^PR^)388bu6oC>n$>1s;C2Buc_X!vyh zt{IK`wTTbU*4|sNqEBJLyb`N|M_+rzT>3J^i5pbh*A*rA)hx6*Ke*vc%76j+)4UvI z&xdcjkQBNhw_)goa|xd3cDRZ6M{dl1cy^`exRb-KUCzfejmsS08TTMg`R?Glhfh#& z*^vlzGkp9r-{1eM_|kF|xoqc=L4}3$RKIOWCnNziLpwk-E- zt61Mq?nace(zarxLxw*c9qPBPviGnl`U$F)Xx;X**u!Z`lyJpk4l2KVKF}|2oI3p4 z61QRd2ZojCRpB<_J^!Rn&eVDQQ5=%n#HN0EZKQw6lHn*LF8)A#nrmN)r&C6m+s=Nm zJ7P{Y%L=!g4;ZWq+q(XCME|SS<$do3g+!~)xJ;tLtFuwzqYZ&;Puad-Dqb3MbyWH< zMf)DdJqY@4{)*75U&p!rZkSJQbuH>8+x-q18T)|-MV*as+{$s) zi~GW>BgWS^(P4XbC#EhL9+6Y0SB{wP6kfa3f7b0i@h9WFHy(IzO3R7 c`LmiG$9g()y$8a74v8jB4DmlPVfM=Z0qxf`3;+NC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/energonrelics/textures/block/infuser_on.png b/src/main/resources/assets/energonrelics/textures/block/infuser_on.png new file mode 100644 index 0000000000000000000000000000000000000000..f602d92df5a7280db06fe0596f030354f18028c2 GIT binary patch literal 2901 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/energonrelics/loot_tables/blocks/infuser.json b/src/main/resources/data/energonrelics/loot_tables/blocks/infuser.json new file mode 100644 index 0000000..90453d2 --- /dev/null +++ b/src/main/resources/data/energonrelics/loot_tables/blocks/infuser.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "energonrelics:infuser" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/energonrelics/recipes/infuser.json b/src/main/resources/data/energonrelics/recipes/infuser.json new file mode 100644 index 0000000..d3a184e --- /dev/null +++ b/src/main/resources/data/energonrelics/recipes/infuser.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#G#", + "GVG", + "#G#" + ], + "key": { + "#": { + "item": "energonrelics:circuit_board" + }, + "G": { + "item": "minecraft:gold_ingot" + }, + "V": { + "item": "energonrelics:veridium_ingot" + } + }, + "result": { + "item": "energonrelics:infuser", + "count": 1 + } +} \ No newline at end of file