diff --git a/build.gradle b/build.gradle index 327a627..79608b7 100644 --- a/build.gradle +++ b/build.gradle @@ -151,6 +151,7 @@ repositories { name 'Curios' url "https://maven.theillusivec4.top/" } + maven { url 'https://maven.blamejared.com' } } dependencies { // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed @@ -176,9 +177,10 @@ dependencies { implementation fg.deobf("curse.maven:astral-sorcery-241721:3156477") implementation fg.deobf("curse.maven:observerlib-316833:3162044") - // runtime deps runtimeOnly fg.deobf("curse.maven:curios-309927:3231111") + compileOnly fg.deobf("vazkii.botania:Botania:1.16.5-416:api") + runtimeOnly fg.deobf("vazkii.botania:Botania:1.16.5-416") // You may put jars on which you depend on in ./libs or you may define them like so.. // compile "some.group:artifact:version:classifier" diff --git a/settings.gradle b/settings.gradle index 4047ddb..8612bc7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -rootProject.name = 'masterfulmachinery' \ No newline at end of file +rootProject.name = "masterfulmachinery" \ No newline at end of file diff --git a/src/main/java/com/ticticboooom/mods/mm/client/jei/ingredients/ManaIngredientHelper.java b/src/main/java/com/ticticboooom/mods/mm/client/jei/ingredients/ManaIngredientHelper.java new file mode 100644 index 0000000..d4318f6 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/client/jei/ingredients/ManaIngredientHelper.java @@ -0,0 +1,45 @@ +package com.ticticboooom.mods.mm.client.jei.ingredients; + +import com.ticticboooom.mods.mm.client.jei.ingredients.model.PressureStack; +import mezz.jei.api.ingredients.IIngredientHelper; + +import javax.annotation.Nullable; + +public class ManaIngredientHelper implements IIngredientHelper { + + @Nullable + @Override + public PressureStack getMatch(Iterable ingredients, PressureStack ingredientToMatch) { + return ingredientToMatch; + } + + @Override + public String getDisplayName(PressureStack ingredient) { + return "Pressure"; + } + + @Override + public String getUniqueId(PressureStack ingredient) { + return ingredient.getAmount() + ""; + } + + @Override + public String getModId(PressureStack ingredient) { + return "pneumaticcraft"; + } + + @Override + public String getResourceId(PressureStack ingredient) { + return "pressure"; + } + + @Override + public PressureStack copyIngredient(PressureStack ingredient) { + return new PressureStack(ingredient.getAmount()); + } + + @Override + public String getErrorInfo(@Nullable PressureStack ingredient) { + return "Error"; + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/parser/ManaPortParser.java b/src/main/java/com/ticticboooom/mods/mm/ports/parser/ManaPortParser.java new file mode 100644 index 0000000..b75c448 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/parser/ManaPortParser.java @@ -0,0 +1,64 @@ +package com.ticticboooom.mods.mm.ports.parser; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.DataResult; +import com.mojang.serialization.JsonOps; +import com.ticticboooom.mods.mm.MM; +import com.ticticboooom.mods.mm.ports.state.ManaPortState; +import com.ticticboooom.mods.mm.ports.state.ManaPortState; +import com.ticticboooom.mods.mm.ports.state.PortState; +import com.ticticboooom.mods.mm.ports.storage.ManaPortStorage; +import com.ticticboooom.mods.mm.ports.storage.ManaPortStorage; +import com.ticticboooom.mods.mm.ports.storage.PortStorage; +import lombok.SneakyThrows; +import mezz.jei.api.ingredients.IIngredients; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; + +import java.util.List; +import java.util.function.Supplier; + +public class ManaPortParser implements IPortFactory { + + @Override + public Supplier createStorage(JsonObject obj) { + return () -> { + DataResult> apply = JsonOps.INSTANCE.withDecoder(ManaPortStorage.CODEC).apply(obj); + return apply.result().get().getFirst(); + }; + } + + @SneakyThrows + @Override + public void write(PacketBuffer buf, PortState state) { + buf.func_240629_a_(ManaPortState.CODEC, ((ManaPortState) state)); + } + + @Override + public void setIngredients(IIngredients ingredients, List stacks, boolean input) { + } + + @Override + public ResourceLocation getInputOverlay() { + return new ResourceLocation(MM.ID, "block/base_ports/mana_input_cutout"); + } + + @Override + public ResourceLocation getOutputOverlay() { + return new ResourceLocation(MM.ID, "block/base_ports/mana_output_cutout"); + } + + @Override + public PortState createState(JsonObject obj) { + DataResult> apply = JsonOps.INSTANCE.withDecoder(ManaPortState.CODEC).apply(obj); + return apply.result().get().getFirst(); + } + + @Override + @SneakyThrows + public PortState createState(PacketBuffer buf) { + return buf.func_240628_a_(ManaPortState.CODEC); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/ManaPortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/ManaPortState.java new file mode 100644 index 0000000..7ce606f --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/ManaPortState.java @@ -0,0 +1,87 @@ +package com.ticticboooom.mods.mm.ports.state; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.ticticboooom.mods.mm.MM; +import com.ticticboooom.mods.mm.client.jei.category.MMJeiPlugin; +import com.ticticboooom.mods.mm.client.jei.ingredients.model.EnergyStack; +import com.ticticboooom.mods.mm.ports.storage.EnergyPortStorage; +import com.ticticboooom.mods.mm.ports.storage.ManaPortStorage; +import com.ticticboooom.mods.mm.ports.storage.PortStorage; +import lombok.Getter; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.gui.ingredient.IGuiIngredientGroup; +import mezz.jei.api.helpers.IJeiHelpers; +import mezz.jei.api.ingredients.IIngredientType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.StringTextComponent; + +import java.util.List; + +public class ManaPortState extends PortState { + +public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( + Codec.INT.fieldOf("amount").forGetter(z -> z.amount) + ).apply(x, ManaPortState::new)); + + + @Getter + private final int amount; + + public ManaPortState(int amount) { + this.amount = amount; + + } + + @Override + public void processRequirement(List storage) { + + } + + @Override + public boolean validateRequirement(List storage) { + return false; + } + + @Override + public void processResult(List storage) { + + } + + @Override + public boolean validateResult(List storage) { + return false; + } + + @Override + public ResourceLocation getName() { + return new ResourceLocation(MM.ID, "mana"); + } + + @Override + public void render(MatrixStack ms, int x, int y, int mouseX, int mouseY, IJeiHelpers helpers) { + IDrawableStatic drawable = helpers.getGuiHelper().createDrawable(new ResourceLocation(MM.ID, "textures/gui/slot_parts.png"), 18, 61, 18, 18); + drawable.draw(ms, x, y); + } + + @Override + public void setupRecipe(IRecipeLayout layout, Integer typeIndex, int x, int y, boolean input) { + IGuiIngredientGroup group = layout.getIngredientsGroup(MMJeiPlugin.ENERGY_TYPE); + group.init(typeIndex, input, x + 1, y + 1); + group.set(typeIndex, new EnergyStack(amount)); + if (this.getChance() < 1){ + group.addTooltipCallback((s, a, b, c) -> { + if (s == typeIndex) { + c.add(new StringTextComponent("Chance: " + this.getChance() * 100 + "%")); + } + }); + } + } + + @Override + public IIngredientType getJeiIngredientType() { + return MMJeiPlugin.ENERGY_TYPE; + } +} \ No newline at end of file diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/ManaPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/ManaPortStorage.java new file mode 100644 index 0000000..99b8bb3 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/ManaPortStorage.java @@ -0,0 +1,70 @@ +package com.ticticboooom.mods.mm.ports.storage; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.ticticboooom.mods.mm.MM; +import com.ticticboooom.mods.mm.inventory.PortEnergyInventory; +import lombok.Getter; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.CapabilityEnergy; + +public class ManaPortStorage extends PortStorage { + public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( + Codec.INT.fieldOf("capacity").forGetter(z -> z.inv.getMaxEnergyStored()) + ).apply(x, ManaPortStorage::new)); + + @Getter + private final PortEnergyInventory inv; + private final LazyOptional invLO; + + public ManaPortStorage(int capacity) { + this.inv = new PortEnergyInventory(0, capacity); + invLO = LazyOptional.of(() -> this.inv); + } + + @Override + public LazyOptional getLO() { + return invLO.cast(); + } + + @Override + public boolean validate(Capability cap) { + return cap == CapabilityEnergy.ENERGY; + } + + @Override + public CompoundNBT save(CompoundNBT nbt) { + nbt.putInt("stored", inv.getEnergyStored()); + return nbt; + } + + @Override + public void load(CompoundNBT nbt) { + if (nbt.contains("stored")) { + inv.setStored(nbt.getInt("stored")); + } + } + + @Override + public void render(MatrixStack stack, int mouseX, int mouseY, int left, int top, Screen screen) { + Minecraft.getInstance().textureManager.bindTexture(new ResourceLocation(MM.ID, "textures/gui/port_gui.png")); + screen.blit(stack, left, top, 0, 0, 175, 256); + int barOffsetX = 175 - 30; + int barOffsetY = 20; + screen.blit(stack, left + barOffsetX, top + barOffsetY, 175, 18, 18, 108); + float amount = 0; + if (inv.getMaxEnergyStored() > 0) { + amount = (float)inv.getEnergyStored() / inv.getMaxEnergyStored(); + } + screen.blit(stack, left + barOffsetX, top + barOffsetY, 193, 18, 18, (int) (108 * amount)); + AbstractGui.drawString(stack, Minecraft.getInstance().fontRenderer,Math.round((float)10000 * amount) / 100.f + "%", left + 30, top + 60, 0xfefefe); + AbstractGui.drawString(stack, Minecraft.getInstance().fontRenderer, inv.getEnergyStored() + "FE", left + 30, top + 80, 0xfefefe); + } +}