diff --git a/build.gradle b/build.gradle index 0d63a45..8940dd8 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,9 @@ dependencies { modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" modImplementation "io.github.prospector:modmenu:${project.modmenu_version}" - //modImplementation "me.shedaniel:RoughlyEnoughItems:${project.roughlyenoughitems_version}" + + modCompileOnly "me.shedaniel:RoughlyEnoughItems-api:${project.roughlyenoughitems_version}" + modRuntime "me.shedaniel:RoughlyEnoughItems:${project.roughlyenoughitems_version}" modImplementation "me.shedaniel.cloth:config-2:${project.cloth_config_version}" include "me.shedaniel.cloth:config-2:${project.cloth_config_version}" diff --git a/gradle.properties b/gradle.properties index c2d701f..ea3f81e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,4 +18,4 @@ org.gradle.jvmargs = -Xmx1G cloth_config_version = 4.7.0-unstable autoconfig_version = 3.2.0-unstable libstructure_version = 1.4.1 - roughlyenoughitems_version = 5.0.0-unstable + roughlyenoughitems_version = 5.0.1-unstable diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/battery/BatteryCoreBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/battery/BatteryCoreBlock.java index 5575c1e..d392acd 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/battery/BatteryCoreBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/battery/BatteryCoreBlock.java @@ -1,13 +1,29 @@ package com.thebrokenrail.energonrelics.block.battery; +import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.entity.battery.BatteryCoreBlockEntity; import com.thebrokenrail.energonrelics.block.util.SimpleBlockWithEntity; +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.Material; import net.minecraft.block.MaterialColor; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Formatting; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import java.util.List; import java.util.function.Function; public class BatteryCoreBlock extends SimpleBlockWithEntity { @@ -19,4 +35,24 @@ public class BatteryCoreBlock extends SimpleBlockWithEntity { protected Function, BlockEntity> getFactory() { return BatteryCoreBlockEntity::new; } + + @Override + @Environment(EnvType.CLIENT) + public void appendTooltip(ItemStack stack, BlockView world, List tooltip, TooltipContext options) { + super.appendTooltip(stack, world, tooltip, options); + tooltip.add(new TranslatableText("text." + EnergonRelics.NAMESPACE + ".battery_core_tooltip", new LiteralText(String.valueOf(stack.getOrCreateTag().getCompound("BlockEntityTag").getInt("Energy")))).formatted(Formatting.GRAY)); + } + + @Override + public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) { + super.onBreak(world, pos, state, player); + if (player.isCreative()) { + Block.dropStacks(state, world, pos, world.getBlockEntity(pos)); + } + } + + @Override + protected int getMaxCount() { + return 1; + } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/laser/IndustrialLaserBlockEntity.java b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/laser/IndustrialLaserBlockEntity.java index 4452f6d..d371fe5 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/laser/IndustrialLaserBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/forcefield/laser/IndustrialLaserBlockEntity.java @@ -79,7 +79,7 @@ public class IndustrialLaserBlockEntity extends FieldProjectorBlockEntity { } else { Vec3d vec = Vec3d.ofCenter(targetPos); - ((ServerWorld) getWorld()).spawnParticles(ParticleTypes.SMOKE, vec.getX(), vec.getY(), vec.getZ(), 1, 0.31f, 0.31f, 0.31f, 0f); + ((ServerWorld) getWorld()).spawnParticles(ParticleTypes.SMOKE, vec.getX(), vec.getY(), vec.getZ(), 2, 0.31f, 0.31f, 0.31f, 0f); progress++; } 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 index edd47b2..14babb7 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserAction.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserAction.java @@ -14,7 +14,7 @@ interface InfuserAction { void run(World world, BlockPos pos); class ItemAction implements InfuserAction { - private final ItemStack stack; + final ItemStack stack; ItemAction(ItemStack stack) { this.stack = stack; @@ -41,7 +41,7 @@ interface InfuserAction { class ParticleAction implements InfuserAction { @Override public void run(World world, BlockPos pos) { - ((ServerWorld) world).spawnParticles(ParticleTypes.SMOKE, pos.getX() + 0.5d, pos.getY() + 0.5d, pos.getZ() + 0.5d, 28, 0.31f, 0.31f, 0.31f, 0f); + ((ServerWorld) world).spawnParticles(ParticleTypes.SMOKE, pos.getX() + 0.5d, pos.getY() + 0.5d, pos.getZ() + 0.5d, 38, 0.31f, 0.31f, 0.31f, 0f); } } } 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 index 31c0c73..c6a7e26 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserBlockEntity.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserBlockEntity.java @@ -1,17 +1,23 @@ package com.thebrokenrail.energonrelics.block.entity.infuser; +import com.thebrokenrail.energonrelics.EnergonRelics; 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 com.thebrokenrail.energonrelics.item.MultimeterItem; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.item.Item; import net.minecraft.nbt.CompoundTag; +import net.minecraft.text.LiteralText; +import net.minecraft.text.MutableText; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Formatting; import java.util.Objects; -public class InfuserBlockEntity extends EnergyReceiverBlockEntity { +public class InfuserBlockEntity extends EnergyReceiverBlockEntity implements MultimeterItem.MultimeterExtra { public InfuserBlockEntity(BlockEntityType type) { super(type); } @@ -94,4 +100,9 @@ public class InfuserBlockEntity extends EnergyReceiverBlockEntity { explosion.run(getWorld(), getPos()); } } + + @Override + public MutableText getExtra() { + return new TranslatableText("text." + EnergonRelics.NAMESPACE + ".infuser_progress", new LiteralText(String.valueOf(((float) progress / (float) HardcodedConfig.INFUSER_TIME) * 100f)).formatted(Formatting.WHITE)); + } } 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 index 6779e60..86d1c9f 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserEntry.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserEntry.java @@ -1,14 +1,18 @@ package com.thebrokenrail.energonrelics.block.entity.infuser; import com.thebrokenrail.energonrelics.util.WeightedList; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -class InfuserEntry { +import java.util.ArrayList; +import java.util.List; + +public class InfuserEntry { public final long cost; public final double successChance; - public final InfuserAction[] success; - public final InfuserAction[] fail; + private final InfuserAction[] success; + private final InfuserAction[] fail; InfuserEntry(long cost, double successChance, InfuserAction[] success, InfuserAction[] fail) { this.cost = cost; @@ -34,4 +38,19 @@ class InfuserEntry { weightedList.pick(world.random).run(world, pos); } + + public List getOutputItems(boolean isFail) { + InfuserAction[] actionList = isFail ? fail : success; + List list = new ArrayList<>(); + for (InfuserAction action : actionList) { + if (action instanceof InfuserAction.ItemAction) { + list.add(((InfuserAction.ItemAction) action).stack); + } + } + return list; + } + + public double getSingleChance(boolean isFail) { + return (1d / (double) success.length) * (isFail ? 1d - successChance : successChance); + } } 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 index 922e3bc..76db735 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserRegistry.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/entity/infuser/InfuserRegistry.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; public class InfuserRegistry { private static final Map map = new HashMap<>(); @@ -24,9 +25,13 @@ public class InfuserRegistry { map.put(item, entry); } + public static Set> entrySet() { + return map.entrySet(); + } + static String toString(InfuserEntry entry) { Item item = null; - for (Map.Entry mapEntry : map.entrySet()) { + for (Map.Entry mapEntry : entrySet()) { if (mapEntry.getValue() == entry) { item = mapEntry.getKey(); break; @@ -46,19 +51,13 @@ public class InfuserRegistry { } static { - add(Items.SUGAR, new InfuserEntry(320, 0.7d, new InfuserAction[]{new InfuserAction.ItemAction(new ItemStack(Items.GLOWSTONE_DUST, 16))}, new InfuserAction[]{new InfuserAction.ItemAction(Items.SUGAR_CANE), new InfuserAction.ExplosionAction()})); + add(Items.SUGAR, new InfuserEntry(320, 0.4d, new InfuserAction[]{new InfuserAction.ItemAction(new ItemStack(Items.GLOWSTONE_DUST, 48))}, new InfuserAction[]{new InfuserAction.ItemAction(Items.SUGAR_CANE), new InfuserAction.ExplosionAction()})); - DyeColor[] colors = DyeColor.values(); - Item[] dyes = new Item[colors.length]; - for (int i = 0; i < colors.length; i++) { - dyes[i] = DyeItem.byColor(colors[i]); - } - addTransform(dyes, 107, 0.6d); - - addTransform(getWool(), 168, 0.5d); + addTransform(getDyes(), 107, 0.4d); + addTransform(getWool(), 168, 0.3d); add(Items.GOLDEN_APPLE, new InfuserEntry(510, 0.3d, new InfuserAction[]{new InfuserAction.ItemAction(Items.ENCHANTED_GOLDEN_APPLE)}, new InfuserAction[]{new InfuserAction.ExplosionAction()})); - add(Items.COAL, new InfuserEntry(340, 0.01d, new InfuserAction[]{new InfuserAction.ItemAction(Items.DIAMOND)}, new InfuserAction[]{new InfuserAction.ExplosionAction()})); + add(Items.COAL, new InfuserEntry(340, 0.2d, new InfuserAction[]{new InfuserAction.ItemAction(Items.DIAMOND)}, new InfuserAction[]{new InfuserAction.ExplosionAction()})); } private static void addTransform(Item[] items, long cost, double successChance) { @@ -67,7 +66,7 @@ public class InfuserRegistry { int i = 0; for (Item item2 : items) { if (item != item2) { - success[i] = new InfuserAction.ItemAction(item2); + success[i] = new InfuserAction.ItemAction(new ItemStack(item2, 8)); i++; } } @@ -85,4 +84,13 @@ public class InfuserRegistry { } return wool.toArray(new Item[0]); } + + private static Item[] getDyes() { + DyeColor[] colors = DyeColor.values(); + Item[] dyes = new Item[colors.length]; + for (int i = 0; i < colors.length; i++) { + dyes[i] = DyeItem.byColor(colors[i]); + } + return dyes; + } } 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 4ae5f30..aa524ce 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/util/SimpleBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/util/SimpleBlock.java @@ -20,6 +20,7 @@ public class SimpleBlock extends Block { if (addToItemGroup() || FabricLoader.getInstance().isDevelopmentEnvironment()) { settings.group(EnergonRelics.ITEM_GROUP); } + settings.maxCount(getMaxCount()); Registry.register(Registry.ITEM, new Identifier(EnergonRelics.NAMESPACE, name), new BlockItem(this, settings)); } } @@ -31,4 +32,8 @@ public class SimpleBlock extends Block { protected boolean registerItem() { return true; } + + protected int getMaxCount() { + return 64; + } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/client/rei/EnergonRelicsPlugin.java b/src/main/java/com/thebrokenrail/energonrelics/client/rei/EnergonRelicsPlugin.java new file mode 100644 index 0000000..0a94aa7 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/client/rei/EnergonRelicsPlugin.java @@ -0,0 +1,50 @@ +package com.thebrokenrail.energonrelics.client.rei; + +import com.thebrokenrail.energonrelics.EnergonRelics; +import com.thebrokenrail.energonrelics.block.entity.infuser.InfuserEntry; +import com.thebrokenrail.energonrelics.block.entity.infuser.InfuserRegistry; +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.RecipeHelper; +import me.shedaniel.rei.api.plugins.REIPluginV0; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; + +import java.util.List; +import java.util.Map; + +@Environment(EnvType.CLIENT) +public class EnergonRelicsPlugin implements REIPluginV0 { + public static final Identifier INFUSER = new Identifier(EnergonRelics.NAMESPACE, "plugin/infuser"); + + @Override + public Identifier getPluginIdentifier() { + return new Identifier(EnergonRelics.NAMESPACE, "plugin"); + } + + @Override + public void registerOthers(RecipeHelper recipeHelper) { + recipeHelper.registerWorkingStations(INFUSER, EntryStack.create(EnergonRelics.INFUSER_BLOCK.asItem())); + } + + @Override + public void registerRecipeDisplays(RecipeHelper recipeHelper) { + for (Map.Entry entry : InfuserRegistry.entrySet()) { + List success = entry.getValue().getOutputItems(false); + if (success.size() > 0) { + recipeHelper.registerDisplay(new InfuserDisplay(new ItemStack(entry.getKey()), success, entry.getValue().getSingleChance(false), entry.getValue().cost)); + } + List fail = entry.getValue().getOutputItems(true); + if (fail.size() > 0) { + recipeHelper.registerDisplay(new InfuserDisplay(new ItemStack(entry.getKey()), fail, entry.getValue().getSingleChance(true), entry.getValue().cost)); + } + } + } + + @Override + public void registerPluginCategories(RecipeHelper recipeHelper) { + recipeHelper.registerCategories(new InfuserCategory()); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/client/rei/InfuserCategory.java b/src/main/java/com/thebrokenrail/energonrelics/client/rei/InfuserCategory.java new file mode 100644 index 0000000..3c3543b --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/client/rei/InfuserCategory.java @@ -0,0 +1,56 @@ +package com.thebrokenrail.energonrelics.client.rei; + +import com.thebrokenrail.energonrelics.EnergonRelics; +import com.thebrokenrail.energonrelics.config.HardcodedConfig; +import me.shedaniel.math.Point; +import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.RecipeCategory; +import me.shedaniel.rei.api.widgets.Widgets; +import me.shedaniel.rei.gui.widget.Widget; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Identifier; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; + +@Environment(EnvType.CLIENT) +public class InfuserCategory implements RecipeCategory { + @Override + public List setupDisplay(InfuserDisplay display, Rectangle bounds) { + Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); + List widgets = new ArrayList<>(); + widgets.add(Widgets.createRecipeBase(bounds)); + widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 61, startPoint.y + 18))); + widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 5), new TranslatableText("category.rei." + EnergonRelics.NAMESPACE + ".infuser.chance", new DecimalFormat("###.##").format(display.successChance * 100d))).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); + widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 14), new TranslatableText("category.rei." + EnergonRelics.NAMESPACE + ".infuser.cost", display.cost)).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); + widgets.add(Widgets.createArrow(new Point(startPoint.x + 24, startPoint.y + 17)).animationDurationTicks(HardcodedConfig.INFUSER_TIME)); + widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 18)).entries(display.getInputEntries().get(0)).markInput()); + widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 18)).entries(display.getOutputEntries()).disableBackground().markOutput()); + return widgets; + } + + @Override + public int getDisplayHeight() { + return 58; + } + + @Override + public Identifier getIdentifier() { + return EnergonRelicsPlugin.INFUSER; + } + + @Override + public EntryStack getLogo() { + return EntryStack.create(EnergonRelics.INFUSER_BLOCK); + } + + @Override + public String getCategoryName() { + return I18n.translate("category.rei." + EnergonRelics.NAMESPACE + ".infuser.name"); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/client/rei/InfuserDisplay.java b/src/main/java/com/thebrokenrail/energonrelics/client/rei/InfuserDisplay.java new file mode 100644 index 0000000..a38af00 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/client/rei/InfuserDisplay.java @@ -0,0 +1,53 @@ +package com.thebrokenrail.energonrelics.client.rei; + +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.RecipeDisplay; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.item.ItemStack; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Environment(EnvType.CLIENT) +public class InfuserDisplay implements RecipeDisplay { + private final EntryStack input; + private final List output; + public final double successChance; + public final long cost; + + public InfuserDisplay(ItemStack input, List output, double successChance, long cost) { + this.input = EntryStack.create(input); + List newList = new ArrayList<>(); + for (ItemStack outputStack : output) { + newList.add(EntryStack.create(outputStack)); + } + this.output = newList; + this.successChance = successChance; + this.cost = cost; + } + + @Override + public List> getInputEntries() { + return Collections.singletonList(Collections.singletonList(input)); + } + + @Override + public List getOutputEntries() { + return output; + } + + @Override + public Identifier getRecipeCategory() { + return EnergonRelicsPlugin.INFUSER; + } + + @Override + public List> getRequiredEntries() { + return getInputEntries(); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/item/MultimeterItem.java b/src/main/java/com/thebrokenrail/energonrelics/item/MultimeterItem.java index 03ffde3..2c6179e 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/item/MultimeterItem.java +++ b/src/main/java/com/thebrokenrail/energonrelics/item/MultimeterItem.java @@ -21,6 +21,10 @@ public class MultimeterItem extends Item { super(new Settings().maxCount(1).group(EnergonRelics.ITEM_GROUP)); } + public interface MultimeterExtra { + MutableText getExtra(); + } + private Text numberToText(long value) { String str; if (value >= Long.MAX_VALUE) { @@ -39,6 +43,7 @@ public class MultimeterItem extends Item { BlockEntity entity = world.getBlockEntity(context.getBlockPos()); boolean success = false; MutableText text = new LiteralText(""); + Text separator = new TranslatableText("text." + EnergonRelics.NAMESPACE + ".multimeter_separator").formatted(Formatting.YELLOW); if (entity instanceof EnergyGenerator) { if (!world.isClient() && context.getPlayer() != null) { text.append(new TranslatableText("text." + EnergonRelics.NAMESPACE + ".energy_available", numberToText(((EnergyGenerator) entity).getDisplayEnergy())).formatted(Formatting.YELLOW)); @@ -48,12 +53,21 @@ public class MultimeterItem extends Item { if (entity instanceof EnergyReceiverBlockEntity) { if (!world.isClient() && context.getPlayer() != null) { if (success) { - text.append(" "); + text.append(separator); } text.append(new TranslatableText("text." + EnergonRelics.NAMESPACE + ".energy_required", numberToText(((EnergyReceiverBlockEntity) entity).getTotalCost())).formatted(Formatting.YELLOW)); } success = true; } + if (entity instanceof MultimeterExtra) { + if (!world.isClient() && context.getPlayer() != null) { + if (success) { + text.append(separator); + } + text.append(((MultimeterExtra) entity).getExtra().formatted(Formatting.YELLOW)); + } + success = true; + } if (success) { if (!world.isClient()) { Objects.requireNonNull(context.getPlayer()).sendMessage(text, true); diff --git a/src/main/resources/assets/energonrelics/lang/en_us.json b/src/main/resources/assets/energonrelics/lang/en_us.json index 7064442..25087d7 100644 --- a/src/main/resources/assets/energonrelics/lang/en_us.json +++ b/src/main/resources/assets/energonrelics/lang/en_us.json @@ -46,5 +46,11 @@ "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", - "block.energonrelics.infuser": "Infuser" + "block.energonrelics.infuser": "Infuser", + "text.energonrelics.infuser_progress": "Infusion Progress: %s%%", + "text.energonrelics.battery_core_tooltip": "%s Energon", + "text.energonrelics.multimeter_separator": ", ", + "category.rei.energonrelics.infuser.chance": "%s%% Chance", + "category.rei.energonrelics.infuser.cost": "Costing %s Energon", + "category.rei.energonrelics.infuser.name": "Infuser" } \ No newline at end of file diff --git a/src/main/resources/assets/energonrelics/textures/block/infuser_off.png b/src/main/resources/assets/energonrelics/textures/block/infuser_off.png index 0989bde..d441f14 100644 Binary files a/src/main/resources/assets/energonrelics/textures/block/infuser_off.png and b/src/main/resources/assets/energonrelics/textures/block/infuser_off.png differ diff --git a/src/main/resources/data/energonrelics/loot_tables/blocks/battery_core.json b/src/main/resources/data/energonrelics/loot_tables/blocks/battery_core.json index 904f19b..8a85e72 100644 --- a/src/main/resources/data/energonrelics/loot_tables/blocks/battery_core.json +++ b/src/main/resources/data/energonrelics/loot_tables/blocks/battery_core.json @@ -6,7 +6,20 @@ "entries": [ { "type": "minecraft:item", - "name": "energonrelics:battery_core" + "name": "energonrelics:battery_core", + "functions": [ + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Energy", + "target": "BlockEntityTag.Energy", + "op": "replace" + } + ] + } + ] } ], "conditions": [ diff --git a/src/main/resources/data/energonrelics/recipes/active_battery_controller.json b/src/main/resources/data/energonrelics/recipes/active_battery_controller.json index 4a108a0..2ead81b 100644 --- a/src/main/resources/data/energonrelics/recipes/active_battery_controller.json +++ b/src/main/resources/data/energonrelics/recipes/active_battery_controller.json @@ -1,21 +1,13 @@ { - "type": "minecraft:crafting_shaped", - "pattern": [ - "#E#", - "EOE", - "#E#" - ], - "key": { - "#": { - "item": "energonrelics:circuit_board" + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "energonrelics:passive_battery_controller" }, - "E": { - "item": "energonrelics:thermal_casing" - }, - "O": { - "item": "minecraft:orange_dye" + { + "item": "minecraft:nether_star" } - }, + ], "result": { "item": "energonrelics:active_battery_controller", "count": 1 diff --git a/src/main/resources/data/energonrelics/recipes/block_breaker.json b/src/main/resources/data/energonrelics/recipes/block_breaker.json index bf66741..bd55f70 100644 --- a/src/main/resources/data/energonrelics/recipes/block_breaker.json +++ b/src/main/resources/data/energonrelics/recipes/block_breaker.json @@ -17,7 +17,7 @@ } }, "result": { - "item": "energonrelics:defensive_laser_core", + "item": "energonrelics:block_breaker", "count": 1 } } \ No newline at end of file diff --git a/src/main/resources/data/energonrelics/recipes/switch.json b/src/main/resources/data/energonrelics/recipes/switch.json new file mode 100644 index 0000000..7eb03a2 --- /dev/null +++ b/src/main/resources/data/energonrelics/recipes/switch.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#I#", + "ILI", + "#I#" + ], + "key": { + "#": { + "item": "energonrelics:circuit_board" + }, + "I": { + "item": "minecraft:iron_ingot" + }, + "L": { + "item": "minecraft:lever" + } + }, + "result": { + "item": "energonrelics:switch", + "count": 2 + } +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 6ee3b05..d36b7ee 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -24,6 +24,9 @@ ], "modmenu": [ "com.thebrokenrail.energonrelics.client.ModMenu" + ], + "rei_plugins": [ + "com.thebrokenrail.energonrelics.client.rei.EnergonRelicsPlugin" ] }, "mixins": [