diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..1c0d331 Binary files /dev/null and b/.DS_Store differ diff --git a/build.gradle b/build.gradle index d749cc7..327a627 100644 --- a/build.gradle +++ b/build.gradle @@ -136,14 +136,21 @@ shadowJar { repositories { maven { url 'https://modmaven.dev/' } maven { - url "https://www.cursemaven.com" - content { - includeGroup "curse.maven" - } + name = "Cursemaven" + url = "https://www.cursemaven.com/" } maven { url 'https://repo.spongepowered.org/maven/' } + maven { + name 'HellFirePvP' + url 'https://maven.hellfiredev.net/' + } + + maven { + name 'Curios' + url "https://maven.theillusivec4.top/" + } } dependencies { // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed @@ -164,11 +171,14 @@ dependencies { // at runtime, use the full JEI jar runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") implementation fg.deobf('me.desht.pneumaticcraft:pneumaticcraft-repressurized:1.16.5-2.12.2-186'); + implementation fg.deobf("curse.maven:create-328085:3278516") + implementation fg.deobf("curse.maven:astral-sorcery-241721:3156477") - implementation fg.deobf("curse.maven:curios-309927:3275653") implementation fg.deobf("curse.maven:observerlib-316833:3162044") + // runtime deps + runtimeOnly fg.deobf("curse.maven:curios-309927:3231111") // 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 new file mode 100644 index 0000000..4047ddb --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'masterfulmachinery' \ No newline at end of file diff --git a/src/main/java/com/ticticboooom/mods/mm/block/MachinePortBlock.java b/src/main/java/com/ticticboooom/mods/mm/block/MachinePortBlock.java index 8176a99..8b04c5c 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/MachinePortBlock.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/MachinePortBlock.java @@ -2,6 +2,10 @@ package com.ticticboooom.mods.mm.block; import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity; import com.ticticboooom.mods.mm.inventory.ItemStackInventory; +import com.ticticboooom.mods.mm.ports.storage.PortStorage; +import com.ticticboooom.mods.mm.ports.storage.StarlightPortStorage; +import hellfirepvp.astralsorcery.common.block.base.BlockStarlightRecipient; +import hellfirepvp.astralsorcery.common.constellation.IWeakConstellation; import lombok.Getter; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; @@ -26,8 +30,9 @@ import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.items.ItemStackHandler; import javax.annotation.Nullable; +import java.util.Random; -public class MachinePortBlock extends Block { +public class MachinePortBlock extends Block implements BlockStarlightRecipient { private RegistryObject> type; @Getter private String langName; @@ -58,6 +63,7 @@ public class MachinePortBlock extends Block { return type.get().create(); } + @Override public ActionResultType onBlockActivated(BlockState state, World level, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult traceResult) { if (!level.isRemote()) { @@ -66,6 +72,7 @@ public class MachinePortBlock extends Block { NetworkHooks.openGui(((ServerPlayerEntity) player), (MachinePortBlockEntity)blockEntity, pos); } } + return ActionResultType.SUCCESS; } @@ -73,6 +80,7 @@ public class MachinePortBlock extends Block { @Override public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { TileEntity tile = worldIn.getTileEntity(pos); + super.onReplaced(state, worldIn, pos, newState, isMoving); if (tile instanceof MachinePortBlockEntity){ LazyOptional lo = ((MachinePortBlockEntity) tile).getStorage().getLO(); if (lo == null){ @@ -83,7 +91,7 @@ public class MachinePortBlock extends Block { InventoryHelper.dropInventoryItems(worldIn, pos, new ItemStackInventory((ItemStackHandler) o)); } } - super.onReplaced(state, worldIn, pos, newState, isMoving); + tile.remove(); } @@ -95,4 +103,17 @@ public class MachinePortBlock extends Block { ((MachinePortBlockEntity) tile).getStorage().neighborChanged(); } } + + @Override + public void receiveStarlight(World world, Random random, BlockPos blockPos, IWeakConstellation iWeakConstellation, double v) { + TileEntity tile = world.getTileEntity(blockPos); + if (tile instanceof MachinePortBlockEntity){ + PortStorage storage = ((MachinePortBlockEntity) tile).getStorage(); + if (storage instanceof StarlightPortStorage) { + StarlightPortStorage starlightStorage = (StarlightPortStorage) storage; + int rec = new Double(v).intValue(); + starlightStorage.getInv().receiveStarlight(rec, false); + } + } + } } diff --git a/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMLangProvider.java b/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMLangProvider.java index 2a44aca..360c25a 100644 --- a/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMLangProvider.java +++ b/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMLangProvider.java @@ -32,9 +32,9 @@ public class MMLangProvider extends LanguageProvider { } } - this.add(MMSetup.BLUEPRINT.get(), "Blueprint"); - this.add(MMSetup.STRUCTURE_DEVICE.get(), "Structure Scanner"); - this.add(MMSetup.PROJECTOR_BLOCK.get(), "Structure Projector"); - this.add(MMSetup.STRUCTURE_BLOCK.get(), "Structure Scanner"); +// this.add(MMSetup.BLUEPRINT.get(), "Blueprint"); +// this.add(MMSetup.STRUCTURE_DEVICE.get(), "Structure Scanner"); +// this.add(MMSetup.PROJECTOR_BLOCK.get(), "Structure Projector"); +// this.add(MMSetup.STRUCTURE_BLOCK.get(), "Structure Scanner"); } } diff --git a/src/main/java/com/ticticboooom/mods/mm/inventory/as/IStarlightStorage.java b/src/main/java/com/ticticboooom/mods/mm/inventory/as/IStarlightStorage.java new file mode 100644 index 0000000..b2e795c --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/inventory/as/IStarlightStorage.java @@ -0,0 +1,47 @@ +package com.ticticboooom.mods.mm.inventory.as; + +public interface IStarlightStorage { + /** + * Adds starlight to the storage. Returns quantity of starlight that was accepted. + * + * @param maxReceive + * Maximum amount of starlight to be inserted. + * @param simulate + * If TRUE, the insertion will only be simulated. + * @return Amount of starlight that was (or would have been, if simulated) accepted by the storage. + */ + int receiveStarlight(int maxReceive, boolean simulate); + + /** + * Removes starlight from the storage. Returns quantity of starlight that was removed. + * + * @param maxExtract + * Maximum amount of starlight to be extracted. + * @param simulate + * If TRUE, the extraction will only be simulated. + * @return Amount of starlight that was (or would have been, if simulated) extracted from the storage. + */ + int extractStarlight(int maxExtract, boolean simulate); + + /** + * Returns the amount of starlight currently stored. + */ + int getStarlightStored(); + + /** + * Returns the maximum amount of starlight that can be stored. + */ + int getMaxStarlightStored(); + + /** + * Returns if this storage can have starlight extracted. + * If this is false, then any calls to extractStarlight will return 0. + */ + boolean canExtract(); + + /** + * Used to determine if this storage can receive starlight. + * If this is false, then any calls to receivestarlight will return 0. + */ + boolean canReceive(); +} diff --git a/src/main/java/com/ticticboooom/mods/mm/inventory/as/PortStarlightInventory.java b/src/main/java/com/ticticboooom/mods/mm/inventory/as/PortStarlightInventory.java new file mode 100644 index 0000000..a430b05 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/inventory/as/PortStarlightInventory.java @@ -0,0 +1,74 @@ +package com.ticticboooom.mods.mm.inventory.as; + +public class PortStarlightInventory implements IStarlightStorage { + + private int stored; + private int capacity; + public PortStarlightInventory(int stored, int capacity) { + + this.stored = stored; + this.capacity = capacity; + } + + @Override + public int receiveStarlight(int maxReceive, boolean simulate) { + if (simulate) { + if ((long)maxReceive + stored > capacity) { + return maxReceive - (stored + maxReceive - capacity); + } else { + return maxReceive; + } + } + if ((long)maxReceive + stored > capacity) { + int result = maxReceive - (stored + maxReceive - capacity); + stored = capacity; + return result; + } else { + stored += maxReceive; + return maxReceive; + } + } + + @Override + public int extractStarlight(int maxExtract, boolean simulate) { + if (simulate) { + if (stored - maxExtract < 0) { + return stored; + } else { + return maxExtract; + } + } + if (stored - maxExtract < 0) { + int result = stored; + stored = 0; + return result; + } else { + stored -= maxExtract; + return maxExtract; + } + } + + @Override + public int getStarlightStored() { + return stored; + } + + @Override + public int getMaxStarlightStored() { + return capacity; + } + + @Override + public boolean canExtract() { + return stored > 0; + } + + @Override + public boolean canReceive() { + return stored < capacity; + } + + public void setStored(int amount) { + this.stored = amount; + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/parser/StarlightPortParser.java b/src/main/java/com/ticticboooom/mods/mm/ports/parser/StarlightPortParser.java new file mode 100644 index 0000000..77f0373 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/parser/StarlightPortParser.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.PortState; +import com.ticticboooom.mods.mm.ports.state.StarlightPortState; +import com.ticticboooom.mods.mm.ports.state.StarlightPortState; +import com.ticticboooom.mods.mm.ports.storage.EnergyPortStorage; +import com.ticticboooom.mods.mm.ports.storage.PortStorage; +import com.ticticboooom.mods.mm.ports.storage.StarlightPortStorage; +import com.ticticboooom.mods.mm.ports.storage.StarlightPortStorage; +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 StarlightPortParser implements IPortFactory { + + @Override + public Supplier createStorage(JsonObject obj) { + return () -> { + DataResult> apply = JsonOps.INSTANCE.withDecoder(StarlightPortStorage.CODEC).apply(obj); + return apply.result().get().getFirst(); + }; + } + @SneakyThrows + @Override + public void write(PacketBuffer buf, PortState state) { + buf.func_240629_a_(StarlightPortState.CODEC, ((StarlightPortState) state)); + } + + @Override + public void setIngredients(IIngredients ingredients, List stacks, boolean input) { + } + + @Override + public ResourceLocation getInputOverlay() { + return new ResourceLocation(MM.ID, "block/compat_ports/starlight_cutout"); + } + + @Override + public ResourceLocation getOutputOverlay() { + return new ResourceLocation(MM.ID, "block/compat_ports/starlight_cutout"); + } + + @Override + public PortState createState(JsonObject obj) { + DataResult> apply = JsonOps.INSTANCE.withDecoder(StarlightPortState.CODEC).apply(obj); + return apply.result().get().getFirst(); + } + + @Override + @SneakyThrows + public PortState createState(PacketBuffer buf) { + return buf.func_240628_a_(StarlightPortState.CODEC); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/EnergyPortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/EnergyPortState.java index ac725bc..91182e7 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/state/EnergyPortState.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/EnergyPortState.java @@ -24,8 +24,7 @@ import java.text.NumberFormat; import java.util.List; public class EnergyPortState extends PortState { - -public static final Codec CODEC =RecordCodecBuilder.create(x -> x.group( + public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( Codec.INT.fieldOf("amount").forGetter(z -> z.amount) ).apply(x, EnergyPortState::new)); diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/StarlightPortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/StarlightPortState.java new file mode 100644 index 0000000..7e274b4 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/StarlightPortState.java @@ -0,0 +1,125 @@ +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.ports.storage.StarlightPortStorage; +import com.ticticboooom.mods.mm.ports.storage.PortStorage; +import com.ticticboooom.mods.mm.ports.storage.StarlightPortStorage; +import hellfirepvp.astralsorcery.common.block.base.BlockStarlightRecipient; +import hellfirepvp.astralsorcery.common.constellation.IWeakConstellation; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.helpers.IJeiHelpers; +import mezz.jei.api.ingredients.IIngredientType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class StarlightPortState extends PortState { + public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( + Codec.INT.fieldOf("amount").forGetter(z -> z.amount) + ).apply(x, StarlightPortState::new)); + + private int amount; + + public StarlightPortState(int starlight) { + this.amount = starlight; + } + + @Override + public void processRequirement(List storage) { + int current = amount; + for (PortStorage inv : storage) { + if (inv instanceof StarlightPortStorage) { + StarlightPortStorage StarlightInv = (StarlightPortStorage) inv; + current -= StarlightInv.getInv().extractStarlight(current, false); + if (current <= 0) { + return; + } + } + } + } + + @Override + public boolean validateRequirement(List storage) { + int current = amount; + for (PortStorage inv : storage) { + if (inv instanceof StarlightPortStorage) { + StarlightPortStorage StarlightInv = (StarlightPortStorage) inv; + current -= StarlightInv.getInv().extractStarlight(current, true); + if (current <= 0) { + return true; + } + } + } + return false; + } + + @Override + public void processResult(List storage) { + /* + int current = amount; + for (PortStorage inv : storage) { + if (inv instanceof StarlightPortStorage) { + StarlightPortStorage StarlightInv = (StarlightPortStorage) inv; + current -= StarlightInv.getInv().receiveStarlight(current, false); + if (current <= 0) { + return; + } + } + } + */ + } + + @Override + public boolean validateResult(List storage) { + /* + int current = amount; + for (PortStorage inv : storage) { + if (inv instanceof StarlightPortStorage) { + StarlightPortStorage StarlightInv = (StarlightPortStorage) inv; + current -= StarlightInv.getInv().receiveStarlight(current, true); + if (current <= 0) { + return true; + } + } + } + */ + return true; + // CHANGE TO FALSE + } + + @Override + public ResourceLocation getName() { + return new ResourceLocation(MM.ID, "starlight"); + } + + @Override + public IIngredientType getJeiIngredientType() { + // Am guessing is placeholder? + return MMJeiPlugin.PRESSURE_TYPE; + } + + @Override + public List getIngredient(boolean input) { + return new ArrayList<>(); + } + + @Override + public void setupRecipe(IRecipeLayout layout, Integer typeIndex, int x, int y, boolean input) { + + } + + @Override + public void render(MatrixStack ms, int x, int y, int mouseX, int mouseY, IJeiHelpers helpers) { + IDrawableStatic slot = helpers.getGuiHelper().getSlotDrawable(); + slot.draw(ms, x, y); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/AstralStarlightPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/AstralStarlightPortStorage.java deleted file mode 100644 index 0583070..0000000 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/AstralStarlightPortStorage.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.ticticboooom.mods.mm.ports.storage; - -import com.mojang.blaze3d.matrix.MatrixStack; -import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.nbt.CompoundNBT; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; - -public class AstralStarlightPortStorage extends PortStorage { - - - - @Override - public LazyOptional getLO() { - return null; - } - - @Override - public boolean validate(Capability cap) { - return false; - } - - @Override - public CompoundNBT save(CompoundNBT nbt) { - return null; - } - - @Override - public void load(CompoundNBT nbt) { - - } - - @Override - public void render(MatrixStack stack, int mouseX, int mouseY, int left, int top, Screen screen) { - - } - - @Override - public void tick(MachinePortBlockEntity tile) { - } -} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/EnergyPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/EnergyPortStorage.java index 8744f7f..38f72eb 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/EnergyPortStorage.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/EnergyPortStorage.java @@ -20,9 +20,9 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.energy.CapabilityEnergy; public class EnergyPortStorage extends PortStorage { - public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( + public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( Codec.INT.fieldOf("capacity").forGetter(z -> z.inv.getMaxEnergyStored()) - ).apply(x, EnergyPortStorage::new)); + ).apply(x, EnergyPortStorage::new)); @Getter private final PortEnergyInventory inv; diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/StarlightPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/StarlightPortStorage.java new file mode 100644 index 0000000..bbfb712 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/StarlightPortStorage.java @@ -0,0 +1,69 @@ +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.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.ticticboooom.mods.mm.MM; +import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity; +import com.ticticboooom.mods.mm.inventory.as.PortStarlightInventory; +import hellfirepvp.astralsorcery.common.block.base.BlockStarlightRecipient; +import hellfirepvp.astralsorcery.common.constellation.IWeakConstellation; +import lombok.Getter; +import lombok.Setter; +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.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +public class StarlightPortStorage extends PortStorage { + public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( + Codec.INT.fieldOf("capacity").forGetter(z -> z.getInv().getMaxStarlightStored()) + ).apply(x, StarlightPortStorage::new)); + + @Getter + private PortStarlightInventory inv; + + public StarlightPortStorage(int capacity) { + this.inv = new PortStarlightInventory(0, capacity); + } + + @Override + public LazyOptional getLO() { + return null; + } + + @Override + public boolean validate(Capability cap) { + return false; + } + + @Override + public CompoundNBT save(CompoundNBT nbt) { + nbt.putInt("starlight", inv.getStarlightStored()); + return nbt; + } + + @Override + public void load(CompoundNBT nbt) { + inv.setStored(nbt.getInt("starlight")); + } + + @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); + AbstractGui.drawCenteredString(stack, Minecraft.getInstance().fontRenderer, inv.getStarlightStored() + " Starlight", left + 60, top + 30, 0xfefefe); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/registration/MMPorts.java b/src/main/java/com/ticticboooom/mods/mm/registration/MMPorts.java index 42e9d32..b080295 100644 --- a/src/main/java/com/ticticboooom/mods/mm/registration/MMPorts.java +++ b/src/main/java/com/ticticboooom/mods/mm/registration/MMPorts.java @@ -19,5 +19,6 @@ public class MMPorts { PORTS.put(new ResourceLocation(MM.ID, "mekanism_slurry"),new MasterfulPortType(new ResourceLocation(MM.ID, "mekanism_slurry"), new MekSlurryPortParser())); PORTS.put(new ResourceLocation(MM.ID, "pncr_pressure"),new MasterfulPortType(new ResourceLocation(MM.ID, "pncr_pressure"), new PneumaticPortParser())); PORTS.put(new ResourceLocation(MM.ID, "create_rotation"),new MasterfulPortType(new ResourceLocation(MM.ID, "create_rotation"), new RotationPortParser())); + PORTS.put(new ResourceLocation(MM.ID, "starlight"),new MasterfulPortType(new ResourceLocation(MM.ID, "starlight"), new StarlightPortParser())); } }