added pncr ports functional

This commit is contained in:
ticticboooom
2021-05-17 11:07:19 +01:00
parent fda62f36d1
commit 04849d3aa7
16 changed files with 143 additions and 51 deletions

View File

@@ -18,7 +18,7 @@ apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
version = '1.16.5-0.1.27-T' + System.currentTimeMillis()
version = '1.16.5-0.1.28-T' + System.currentTimeMillis()
group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'MasterfulMachinery'
@@ -155,7 +155,7 @@ dependencies {
compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api")
// at runtime, use the full JEI jar
runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}")
compileOnly fg.deobf('me.desht.pneumaticcraft:pneumaticcraft-repressurized:1.16.5-2.12.2-186');
implementation fg.deobf('me.desht.pneumaticcraft:pneumaticcraft-repressurized:1.16.5-2.12.2-186');
// You may put jars on which you depend on in ./libs or you may define them like so..
// compile "some.group:artifact:version:classifier"
// compile "some.group:artifact:version"

View File

@@ -14,9 +14,11 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.network.NetworkHooks;
@@ -32,13 +34,16 @@ public class MachinePortBlock extends Block {
private String controllerId;
@Getter
private String textureOverride;
@Getter
private ResourceLocation overlay;
public MachinePortBlock(RegistryObject<TileEntityType<?>> type, String name, String controllerId, String textureOverride) {
public MachinePortBlock(RegistryObject<TileEntityType<?>> type, String name, String controllerId, String textureOverride, ResourceLocation overlay) {
super(AbstractBlock.Properties.of(Material.METAL));
this.type = type;
this.langName = name;
this.controllerId = controllerId;
this.textureOverride = textureOverride;
this.overlay = overlay;
}
@Override
@@ -75,4 +80,14 @@ public class MachinePortBlock extends Block {
}
super.onRemove(state, world, pos, state1, p_196243_5_);
}
@Override
public void neighborChanged(BlockState p_220069_1_, World world, BlockPos pos, Block p_220069_4_, BlockPos changedPos, boolean p_220069_6_) {
super.neighborChanged(p_220069_1_, world, pos, p_220069_4_, changedPos, p_220069_6_);
TileEntity tile = world.getBlockEntity(pos);
if (tile instanceof MachinePortBlockEntity){
((MachinePortBlockEntity) tile).getStorage().neighborChanged();
}
}
}

View File

@@ -71,6 +71,8 @@ public class MachinePortBlockEntity extends UpdatableTile implements ITickableTi
@Override
public void tick() {
this.getStorage().tick(this);
update();
}
}

View File

@@ -42,11 +42,11 @@ public class MMBlockStateProvider extends BlockStateProvider {
}
for (RegistryObject<MachinePortBlock> port : MMLoader.IPORT_BLOCKS) {
dynamicBlock(port.getId(), port.get().getTextureOverride() != null ? RLUtils.toRL(port.get().getTextureOverride()) : BASE_TEXTURE, IPORT_TEXTURE);
dynamicBlock(port.getId(), port.get().getTextureOverride() != null ? RLUtils.toRL(port.get().getTextureOverride()) : BASE_TEXTURE, port.get().getOverlay());
simpleBlock(port.get(), new ModelFile.UncheckedModelFile(new ResourceLocation(MM.ID, "block/" + port.getId().getPath())));
}
for (RegistryObject<MachinePortBlock> port : MMLoader.OPORT_BLOCKS) {
dynamicBlock(port.getId(), port.get().getTextureOverride() != null ? RLUtils.toRL(port.get().getTextureOverride()) : BASE_TEXTURE, OPORT_TEXTURE);
dynamicBlock(port.getId(), port.get().getTextureOverride() != null ? RLUtils.toRL(port.get().getTextureOverride()) : BASE_TEXTURE, port.get().getOverlay());
simpleBlock(port.get(), new ModelFile.UncheckedModelFile(new ResourceLocation(MM.ID, "block/" + port.getId().getPath())));
}

View File

@@ -5,6 +5,7 @@ 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.EnergyPortState;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.storage.EnergyPortStorage;
@@ -12,6 +13,7 @@ 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;
@@ -38,6 +40,16 @@ public class EnergyPortParser implements IPortFactory {
public void setIngredients(IIngredients ingredients, List<?> stacks, boolean input) {
}
@Override
public ResourceLocation getInputOverlay() {
return new ResourceLocation(MM.ID, "block/base_ports/energy_input_cutout");
}
@Override
public ResourceLocation getOutputOverlay() {
return new ResourceLocation(MM.ID, "block/base_ports/energy_output_cutout");
}
@Override
public PortState createState(JsonObject obj) {
DataResult<Pair<EnergyPortState, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(EnergyPortState.CODEC).apply(obj);

View File

@@ -5,6 +5,7 @@ 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.FluidPortState;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.storage.FluidPortStorage;
@@ -13,6 +14,7 @@ import lombok.SneakyThrows;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.FluidStack;
import java.util.List;
@@ -53,4 +55,14 @@ public class FluidPortParser implements IPortFactory {
public PortState createState(PacketBuffer buf) {
return buf.readWithCodec(FluidPortState.CODEC);
}
@Override
public ResourceLocation getInputOverlay() {
return new ResourceLocation(MM.ID, "block/base_ports/fluid_input_cutout");
}
@Override
public ResourceLocation getOutputOverlay() {
return new ResourceLocation(MM.ID, "block/base_ports/fluid_output_cutout");
}
}

View File

@@ -6,6 +6,7 @@ import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import mezz.jei.api.ingredients.IIngredientType;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import java.util.HashMap;
import java.util.List;
@@ -17,4 +18,6 @@ public interface IPortFactory {
Supplier<PortStorage> createStorage(JsonObject obj);
void write(PacketBuffer buf, PortState state);
void setIngredients(IIngredients ingredients, List<?> stacks, boolean input);
ResourceLocation getInputOverlay();
ResourceLocation getOutputOverlay();
}

View File

@@ -5,6 +5,7 @@ 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.ItemPortState;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
@@ -14,6 +15,7 @@ import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.FluidStack;
import java.util.List;
@@ -56,4 +58,13 @@ public class ItemPortParser implements IPortFactory {
public PortState createState(PacketBuffer buf) {
return buf.readWithCodec(ItemPortState.CODEC);
}
@Override
public ResourceLocation getInputOverlay() {
return new ResourceLocation(MM.ID, "block/base_ports/item_input_cutout");
}
@Override
public ResourceLocation getOutputOverlay() {
return new ResourceLocation(MM.ID, "block/base_ports/item_output_cutout");
}
}

View File

@@ -5,6 +5,7 @@ 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.MekGasPortState;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
@@ -16,6 +17,7 @@ import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import java.util.List;
import java.util.function.Supplier;
@@ -56,4 +58,14 @@ public class MekGasPortParser implements IPortFactory {
public void write(PacketBuffer buf, PortState state) {
buf.writeWithCodec(MekGasPortState.CODEC, (MekGasPortState)state);
}
@Override
public ResourceLocation getInputOverlay() {
return new ResourceLocation(MM.ID, "block/compat_ports/mekanism_gas_cutout");
}
@Override
public ResourceLocation getOutputOverlay() {
return new ResourceLocation(MM.ID, "block/compat_ports/mekanism_gas_cutout");
}
}

View File

@@ -5,6 +5,7 @@ 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.MekSlurryPortState;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
@@ -16,6 +17,7 @@ import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import java.util.List;
import java.util.function.Supplier;
@@ -56,4 +58,14 @@ public class MekSlurryPortParser implements IPortFactory {
public void write(PacketBuffer buf, PortState state) {
buf.writeWithCodec(MekSlurryPortState.CODEC, (MekSlurryPortState)state);
}
@Override
public ResourceLocation getInputOverlay() {
return new ResourceLocation(MM.ID, "block/compat_ports/mekanism_slurry_cutout");
}
@Override
public ResourceLocation getOutputOverlay() {
return new ResourceLocation(MM.ID, "block/compat_ports/mekanism_slurry_cutout");
}
}

View File

@@ -5,6 +5,7 @@ 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.client.jei.category.MMJeiPlugin;
import com.ticticboooom.mods.mm.client.jei.ingredients.model.PressureStack;
import com.ticticboooom.mods.mm.ports.state.FluidPortState;
@@ -17,6 +18,7 @@ import lombok.SneakyThrows;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.FluidStack;
import java.util.List;
@@ -46,6 +48,16 @@ public class PneumaticPortParser implements IPortFactory{
}
}
@Override
public ResourceLocation getInputOverlay() {
return new ResourceLocation(MM.ID, "block/compat_ports/pncr_pressure_cutout");
}
@Override
public ResourceLocation getOutputOverlay() {
return new ResourceLocation(MM.ID, "block/compat_ports/pncr_pressure_cutout");
}
@Override
public PortState createState(JsonObject obj) {
DataResult<Pair<PneumaticPortState, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(PneumaticPortState.CODEC).apply(obj);

View File

@@ -22,7 +22,7 @@ import java.util.List;
public class PneumaticPortState extends PortState {
public static final Codec<PneumaticPortState> CODEC = RecordCodecBuilder.create(x -> x.group(
Codec.FLOAT.fieldOf("pressure").forGetter(z -> z.pressure)
Codec.FLOAT.fieldOf("air").forGetter(z -> z.pressure)
).apply(x, PneumaticPortState::new));
private float pressure;
@@ -33,29 +33,19 @@ public class PneumaticPortState extends PortState {
@Override
public void processRequirement(List<PortStorage> storage) {
float current = pressure;
for (PortStorage portStorage : storage) {
if (portStorage instanceof PneumaticPortStorage){
PneumaticPortStorage pnc = (PneumaticPortStorage) portStorage;
float prePressure = pnc.getInv().getPressure();
pnc.getInv().setPressure(pnc.getInv().getPressure() - current);
current -= prePressure;
if (current <= 0){
return;
}
pnc.getInv().addAir(-(int) pressure);
}
}
}
@Override
public boolean validateRequirement(List<PortStorage> storage) {
float current = pressure;
for (PortStorage portStorage : storage) {
if (portStorage instanceof PneumaticPortStorage){
PneumaticPortStorage pnc = (PneumaticPortStorage) portStorage;
float prePressure = pnc.getInv().getPressure();
current -= prePressure;
if (current <= 0){
if (((PneumaticPortStorage) portStorage).getInv().getAir() >= this.pressure){
return true;
}
}
@@ -65,42 +55,19 @@ public class PneumaticPortState extends PortState {
@Override
public void processResult(List<PortStorage> storage) {
float current = pressure;
for (PortStorage portStorage : storage) {
if (portStorage instanceof PneumaticPortStorage){
PneumaticPortStorage pnc = (PneumaticPortStorage) portStorage;
float prePressure = pnc.getInv().getPressure();
if (pnc.getInv().getPressure() - current > pnc.getInv().getDangerPressure()){
pnc.getInv().setPressure(pnc.getInv().getDangerPressure());
current -= pnc.getInv().getDangerPressure() - prePressure;
} else {
pnc.getInv().setPressure(prePressure + current);
current -= prePressure;
}
if (current <= 0){
return;
}
pnc.getInv().addAir((int)pressure);
}
}
}
@Override
public boolean validateResult(List<PortStorage> storage) {
float current = pressure;
for (PortStorage portStorage : storage) {
if (portStorage instanceof PneumaticPortStorage){
PneumaticPortStorage pnc = (PneumaticPortStorage) portStorage;
float prePressure = pnc.getInv().getPressure();
if (pnc.getInv().getPressure() - current > pnc.getInv().getDangerPressure()){
pnc.getInv().setPressure(pnc.getInv().getDangerPressure());
current -= pnc.getInv().getDangerPressure() - prePressure;
} else {
pnc.getInv().setPressure(prePressure + current);
current -= prePressure;
}
if (current <= 0){
return true;
}
return true;
}
}
return false;
@@ -108,7 +75,7 @@ public class PneumaticPortState extends PortState {
@Override
public ResourceLocation getName() {
return new ResourceLocation(MM.ID, "pressure");
return new ResourceLocation(MM.ID, "pncr_pressure");
}
@Override

View File

@@ -3,15 +3,28 @@ 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.block.tile.MachinePortBlockEntity;
import lombok.Getter;
import me.desht.pneumaticcraft.api.PNCCapabilities;
import me.desht.pneumaticcraft.api.tileentity.IAirHandlerMachine;
import me.desht.pneumaticcraft.common.capabilities.MachineAirHandler;
import me.desht.pneumaticcraft.common.util.DirectionUtil;
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.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PneumaticPortStorage extends PortStorage {
public static final Codec<PneumaticPortStorage> CODEC = RecordCodecBuilder.create(x -> x.group(
@@ -26,6 +39,7 @@ public class PneumaticPortStorage extends PortStorage {
private float danger;
private float critical;
private int volume;
private final Map<IAirHandlerMachine, List<Direction>> airHandlerMap = new HashMap<>();
public PneumaticPortStorage(float danger, float critical, int volume) {
this.danger = danger;
@@ -33,6 +47,7 @@ public class PneumaticPortStorage extends PortStorage {
this.volume = volume;
inv = new MachineAirHandler(danger, critical, volume);
invLO = LazyOptional.of(() -> inv);
neighborChanged();
}
@Override
@@ -47,23 +62,37 @@ public class PneumaticPortStorage extends PortStorage {
@Override
public CompoundNBT save(CompoundNBT nbt) {
CompoundNBT compound = new CompoundNBT();
nbt.putFloat("pressure", inv.getPressure());
return compound;
nbt.putInt("air", inv.getAir());
return nbt;
}
@Override
public void load(CompoundNBT nbt) {
inv.setPressure(nbt.getFloat("pressure"));
inv.addAir(-inv.getAir());
inv.addAir(nbt.getInt("air"));
}
@Override
public void render(MatrixStack stack, int mouseX, int mouseY, int left, int top, Screen screen) {
Minecraft.getInstance().textureManager.bind(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);
AbstractGui.drawString(stack, Minecraft.getInstance().font, NumberFormat.getInstance().format(inv.getPressure()) + "P", left + 30, top + 60, 0xfefefe);
}
@Override
public void tick(MachinePortBlockEntity tile) {
this.inv.tick(tile);
}
@Override
public void neighborChanged() {
airHandlerMap.clear();
for (Direction side : DirectionUtil.VALUES) {
getLO().ifPresent(handler -> airHandlerMap.computeIfAbsent((IAirHandlerMachine) handler, k -> new ArrayList<>()).add(side));
}
airHandlerMap.forEach(IAirHandlerMachine::setConnectedFaces);
}
}

View File

@@ -35,4 +35,8 @@ public abstract class PortStorage {
public void tick(MachinePortBlockEntity tile) {
}
public void neighborChanged() {
}
}

View File

@@ -97,7 +97,7 @@ public class MMLoader {
Registerable<RegistryObject<MachinePortBlock>> block = new Registerable<>();
Registerable<RegistryObject<ContainerType<?>>> cont = new Registerable<>();
cont.set(MMSetup.CONTAINER_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_input", () -> IForgeContainerType.create((i, o, u) -> new PortBlockContainer(cont.get().get(), i, o, u))));
block.set(MMSetup.BLOCKS_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_input", () -> new MachinePortBlock(tile.get(), name, controllerId, portTextureOverrideFinal)));
block.set(MMSetup.BLOCKS_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_input", () -> new MachinePortBlock(tile.get(), name, controllerId, portTextureOverrideFinal, value.getParser().getInputOverlay())));
tile.set(MMSetup.TILES_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_input", () -> TileEntityType.Builder.of(() -> new MachinePortBlockEntity(tile.get().get(),cont.get().get(), data.get(), true), block.get().get()).build(null)));
MMSetup.ITEMS_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_input", () -> new BlockItem(block.get().get(), new Item.Properties().tab(MASTERFUL_ITEM_GROUP)));
PORT_CONTAINERS.add(cont.get());
@@ -109,7 +109,7 @@ public class MMLoader {
Registerable<RegistryObject<MachinePortBlock>> block = new Registerable<>();
Registerable<RegistryObject<ContainerType<?>>> cont = new Registerable<>();
cont.set(MMSetup.CONTAINER_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_output", () -> IForgeContainerType.create((i, o, u) -> new PortBlockContainer(cont.get().get(), i, o, u))));
block.set(MMSetup.BLOCKS_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_output", () -> new MachinePortBlock(tile.get(), name, controllerId, portTextureOverrideFinal)));
block.set(MMSetup.BLOCKS_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_output", () -> new MachinePortBlock(tile.get(), name, controllerId, portTextureOverrideFinal, value.getParser().getOutputOverlay())));
tile.set(MMSetup.TILES_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_output", () -> TileEntityType.Builder.of(() -> new MachinePortBlockEntity(tile.get().get(), cont.get().get(), data.get(), false), block.get().get()).build(null)));
MMSetup.ITEMS_REG.register(controllerId + "_" + id + "_port_" + resourceLocation.getPath() + "_output", () -> new BlockItem(block.get().get(), new Item.Properties().tab(MASTERFUL_ITEM_GROUP)));
PORT_CONTAINERS.add(cont.get());

View File

@@ -17,5 +17,6 @@ public class MMPorts {
PORTS.put(new ResourceLocation(MM.ID, "energy"),new MasterfulPortType(new ResourceLocation(MM.ID, "energy"), new EnergyPortParser()));
PORTS.put(new ResourceLocation(MM.ID, "mekanism_gas"),new MasterfulPortType(new ResourceLocation(MM.ID, "mekanism_gas"), new MekGasPortParser()));
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()));
}
}