Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prototype configuration tool #1663

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package gregtech.api.capability;

import gregtech.api.capability.tool.IConfiguratorItem;
import gregtech.api.capability.tool.IScrewdriverItem;
import gregtech.api.capability.tool.ISoftHammerItem;
import gregtech.api.capability.tool.IWrenchItem;
Expand All @@ -23,6 +24,9 @@ public class GregtechCapabilities {
@CapabilityInject(ISoftHammerItem.class)
public static Capability<ISoftHammerItem> CAPABILITY_MALLET = null;

@CapabilityInject(IConfiguratorItem.class)
public static Capability<IConfiguratorItem> CAPABILITY_CONFIGURATOR = null;

@CapabilityInject(IFuelable.class)
public static Capability<IFuelable> CAPABILITY_FUELABLE = null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,6 @@ public class GregtechTileCapabilities {
@CapabilityInject(IActiveOutputSide.class)
public static Capability<IActiveOutputSide> CAPABILITY_ACTIVE_OUTPUT_SIDE = null;

@CapabilityInject(IConfigurable.class)
public static Capability<IConfigurable> CAPABILITY_CONFIGURABLE = null;
}
17 changes: 17 additions & 0 deletions src/main/java/gregtech/api/capability/IConfigurable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package gregtech.api.capability;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;

/**
* For configurable things
*/
public interface IConfigurable {

ResourceLocation getConfigurationID();

NBTTagCompound copyConfiguration(EntityPlayer player);

void pasteConfiguration(EntityPlayer player, NBTTagCompound configuration);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package gregtech.api.capability;

import gregtech.api.capability.tool.IConfiguratorItem;
import gregtech.api.capability.tool.IScrewdriverItem;
import gregtech.api.capability.tool.ISoftHammerItem;
import gregtech.api.capability.tool.IWrenchItem;
Expand Down Expand Up @@ -40,10 +41,12 @@ public static void init() {
registerCapabilityWithNoDefault(IControllable.class);
registerCapabilityWithNoDefault(IActiveOutputSide.class);
registerCapabilityWithNoDefault(IFuelable.class);
registerCapabilityWithNoDefault(IConfigurable.class);

registerCapabilityWithNoDefault(IWrenchItem.class);
registerCapabilityWithNoDefault(IScrewdriverItem.class);
registerCapabilityWithNoDefault(ISoftHammerItem.class);
registerCapabilityWithNoDefault(IConfiguratorItem.class);

//internal capabilities
CapabilityManager.INSTANCE.register(GTWorldGenCapability.class, GTWorldGenCapability.STORAGE, GTWorldGenCapability.FACTORY);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import gregtech.api.recipes.RecipeMap;
import gregtech.api.util.GTUtility;
import gregtech.common.ConfigHolder;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
Expand Down Expand Up @@ -504,4 +505,30 @@ public void deserializeNBT(NBTTagCompound compound) {
}
}

@Override
protected boolean isConfigurable() {
return true;
}

@Override
public NBTTagCompound copyConfiguration(final EntityPlayer player) {
final NBTTagCompound compound = super.copyConfiguration(player);
compound.setBoolean(ALLOW_OVERCLOCKING, this.allowOverclocking);
compound.setLong(OVERCLOCK_VOLTAGE, this.overclockVoltage);
return compound;
}

@Override
public void pasteConfiguration(final EntityPlayer player, final NBTTagCompound compound) {
super.pasteConfiguration(player, compound);
if (compound.hasKey(ALLOW_OVERCLOCKING)) {
setAllowOverclocking(compound.getBoolean(ALLOW_OVERCLOCKING));
}
if (compound.hasKey(OVERCLOCK_VOLTAGE)) {
this.overclockVoltage = compound.getLong(OVERCLOCK_VOLTAGE);
} else {
// Calculate overclock voltage based on old allow flag
this.overclockVoltage = this.allowOverclocking ? getMaxVoltage() : 0;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package gregtech.api.capability.tool;

public interface IConfiguratorItem {

boolean damageItem(int damage, boolean simulate);

}
20 changes: 18 additions & 2 deletions src/main/java/gregtech/api/cover/CoverBehavior.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import codechicken.lib.vec.Matrix4;
import com.google.common.collect.Lists;
import gregtech.api.GTValues;
import gregtech.api.capability.IConfigurable;
import gregtech.api.gui.IUIHolder;
import gregtech.api.render.SimpleSidedCubeRenderer.RenderSide;
import gregtech.api.render.Textures;
Expand All @@ -20,6 +21,7 @@
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
Expand All @@ -33,8 +35,7 @@
* <p>
* Can implement {@link net.minecraft.util.ITickable} to listen to meta tile entity updates
*/
@SuppressWarnings("unused")
public abstract class CoverBehavior implements IUIHolder {
public abstract class CoverBehavior implements IUIHolder, IConfigurable {

private CoverDefinition coverDefinition;
public final ICoverable coverHolder;
Expand Down Expand Up @@ -85,6 +86,21 @@ public void readFromNBT(NBTTagCompound tagCompound) {
this.redstoneSignalOutput = tagCompound.getInteger("RedstoneSignal");
}

@Override
public ResourceLocation getConfigurationID() {
return getCoverDefinition().getCoverId();
}

@Override
public NBTTagCompound copyConfiguration(final EntityPlayer player) {
return new NBTTagCompound();
}

@Override
public void pasteConfiguration(final EntityPlayer player, final NBTTagCompound configuration) {
// nothing by default
}

public void writeInitialSyncData(PacketBuffer packetBuffer) {
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package gregtech.api.items.toolitem;

import gregtech.api.capability.GregtechCapabilities;
import gregtech.api.capability.tool.IConfiguratorItem;
import gregtech.api.items.metaitem.stats.IItemCapabilityProvider;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;

public class ConfiguratorItemStat implements IItemCapabilityProvider {

@Override
public ICapabilityProvider createProvider(ItemStack itemStack) {
return new CapabilityProvider(itemStack);
}

private static class CapabilityProvider extends AbstractToolItemCapabilityProvider<IConfiguratorItem> implements IConfiguratorItem {

public CapabilityProvider(final ItemStack itemStack) {
super(itemStack);
}

@Override
protected Capability<IConfiguratorItem> getCapability() {
return GregtechCapabilities.CAPABILITY_CONFIGURATOR;
}
}
}
26 changes: 25 additions & 1 deletion src/main/java/gregtech/api/metatileentity/MTETrait.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package gregtech.api.metatileentity;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;

import java.util.function.Consumer;

public abstract class MTETrait {
import gregtech.api.capability.IConfigurable;

public abstract class MTETrait implements IConfigurable {

protected MetaTileEntity metaTileEntity;

Expand Down Expand Up @@ -39,6 +43,26 @@ public NBTTagCompound serializeNBT() {
public void deserializeNBT(NBTTagCompound compound) {
}

@SuppressWarnings("static-method")
protected boolean isConfigurable() {
return false;
}

@Override
public ResourceLocation getConfigurationID() {
throw new AssertionError("unused");
warjort marked this conversation as resolved.
Show resolved Hide resolved
}

@Override
public NBTTagCompound copyConfiguration(final EntityPlayer player) {
return new NBTTagCompound();
}

@Override
public void pasteConfiguration(final EntityPlayer player, final NBTTagCompound compound) {
// nothing by default
}

public void writeInitialData(PacketBuffer buffer) {
}

Expand Down
38 changes: 37 additions & 1 deletion src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.google.common.base.Preconditions;
import gregtech.api.GregTechAPI;
import gregtech.api.capability.GregtechTileCapabilities;
import gregtech.api.capability.IConfigurable;
import gregtech.api.capability.IEnergyContainer;
import gregtech.api.capability.impl.FluidHandlerProxy;
import gregtech.api.capability.impl.FluidTankList;
Expand All @@ -21,6 +22,7 @@
import gregtech.api.gui.ModularUI;
import gregtech.api.render.Textures;
import gregtech.api.util.GTFluidUtils;
import gregtech.api.util.GTLog;
import gregtech.api.util.GTUtility;
import net.minecraft.block.Block;
import net.minecraft.block.state.BlockFaceShape;
Expand Down Expand Up @@ -58,7 +60,7 @@

import static gregtech.api.util.InventoryUtils.simulateItemStackMerge;

public abstract class MetaTileEntity implements ICoverable {
public abstract class MetaTileEntity implements ICoverable, IConfigurable {

public static final int DEFAULT_PAINTING_COLOR = 0xFFFFFF;
public static final IndexedCuboid6 FULL_CUBE_COLLISION = new IndexedCuboid6(null, Cuboid6.full);
Expand Down Expand Up @@ -804,6 +806,7 @@ public final <T> T getCoverCapability(Capability<T> capability, EnumFacing side)
return originalCapability;
}

@Override
public <T> T getCapability(Capability<T> capability, EnumFacing side) {
if (capability == GregtechTileCapabilities.CAPABILITY_COVERABLE) {
return GregtechTileCapabilities.CAPABILITY_COVERABLE.cast(this);
Expand Down Expand Up @@ -1149,6 +1152,39 @@ public void readFromNBT(NBTTagCompound data) {
this.isFragile = data.getBoolean(TAG_KEY_FRAGILE);
}

@Override
public ResourceLocation getConfigurationID() {
return this.metaTileEntityId;
}

@Override
public NBTTagCompound copyConfiguration(EntityPlayer player) {
final NBTTagCompound data = new NBTTagCompound();
data.setInteger("FrontFacing", this.frontFacing.getIndex());

for (MTETrait mteTrait : this.mteTraits) {
if (mteTrait.isConfigurable()) {
data.setTag(mteTrait.getName(), mteTrait.copyConfiguration(player));
}
}
return data;
}

@Override
public void pasteConfiguration(final EntityPlayer player, final NBTTagCompound data) {
setFrontFacing(EnumFacing.VALUES[data.getInteger("FrontFacing")]);

// Review: Is it possible to have mismatched traits?
for (MTETrait mteTrait : this.mteTraits) {
if (mteTrait.isConfigurable()) {
final NBTTagCompound traitCompound = data.getCompoundTag(mteTrait.getName());
if (traitCompound != null) {
mteTrait.pasteConfiguration(player, traitCompound);
}
}
}
}

@Override
public boolean isValid() {
return getHolder() != null && getHolder().isValid();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,10 @@ public <T> T getCapability(Capability<T> capability, EnumFacing side) {
return GregtechTileCapabilities.CAPABILITY_ACTIVE_OUTPUT_SIDE.cast(this);
}
return null;
} else if (capability == GregtechTileCapabilities.CAPABILITY_CONFIGURABLE) {
return GregtechTileCapabilities.CAPABILITY_CONFIGURABLE.cast(this);
}

return super.getCapability(capability, side);
}

Expand All @@ -210,6 +213,25 @@ public void readFromNBT(NBTTagCompound data) {
this.allowInputFromOutputSide = data.getBoolean("AllowInputFromOutputSide");
}

@Override
public NBTTagCompound copyConfiguration(final EntityPlayer player) {
final NBTTagCompound data = super.copyConfiguration(player);
data.setInteger("OutputFacing", getOutputFacing().getIndex());
data.setBoolean("AutoOutputItems", this.autoOutputItems);
data.setBoolean("AutoOutputFluids", this.autoOutputFluids);
data.setBoolean("AllowInputFromOutputSide", this.allowInputFromOutputSide);
return data;
}

@Override
public void pasteConfiguration(final EntityPlayer player, final NBTTagCompound data) {
super.pasteConfiguration(player, data);
setOutputFacing(EnumFacing.VALUES[data.getInteger("OutputFacing")]);
setAutoOutputItems(data.getBoolean("AutoOutputItems"));
setAutoOutputFluids(data.getBoolean("AutoOutputFluids"));
setAllowInputFromOutputSide(data.getBoolean("AllowInputFromOutputSide"));
}

@Override
public void writeInitialSyncData(PacketBuffer buf) {
super.writeInitialSyncData(buf);
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/gregtech/common/covers/CoverConveyor.java
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,9 @@ public <T> T getCapability(Capability<T> capability, T defaultValue) {
if(capability == GregtechTileCapabilities.CAPABILITY_CONTROLLABLE) {
return GregtechTileCapabilities.CAPABILITY_CONTROLLABLE.cast(this);
}
if (capability == GregtechTileCapabilities.CAPABILITY_CONFIGURABLE) {
return GregtechTileCapabilities.CAPABILITY_CONFIGURABLE.cast(this);
}
return defaultValue;
}

Expand Down Expand Up @@ -482,6 +485,38 @@ public void readFromNBT(NBTTagCompound tagCompound) {
}
}

@Override
public NBTTagCompound copyConfiguration(final EntityPlayer player) {
final NBTTagCompound tagCompound = super.copyConfiguration(player);
tagCompound.setInteger("TransferRate", this.transferRate);
tagCompound.setInteger("ConveyorMode", this.conveyorMode.ordinal());
tagCompound.setInteger("ManualImportExportMode", this.manualImportExportMode.ordinal());
tagCompound.setTag("Filter", this.itemFilterContainer.copyConfiguration(player));
return tagCompound;
}

@Override
public void pasteConfiguration(final EntityPlayer player, final NBTTagCompound tagCompound) {
super.pasteConfiguration(player, tagCompound);
setTransferRate(tagCompound.getInteger("TransferRate"));
setConveyorMode(ConveyorMode.values()[tagCompound.getInteger("ConveyorMode")]);
//LEGACY SAVE FORMAT SUPPORT
if (tagCompound.hasKey("AllowManualIO")) {
setManualImportExportMode(tagCompound.getBoolean("AllowManualIO")
? ManualImportExportMode.FILTERED
: ManualImportExportMode.DISABLED);
}
if (tagCompound.hasKey("ManualImportExportMode")) {
setManualImportExportMode(ManualImportExportMode.values()[tagCompound.getInteger("ManualImportExportMode")]);
}
if (tagCompound.hasKey("FilterInventory")) {
this.itemFilterContainer.pasteConfiguration(player, tagCompound);
} else {
final NBTTagCompound filterComponent = tagCompound.getCompoundTag("Filter");
this.itemFilterContainer.pasteConfiguration(player, filterComponent);
}
}

public enum ConveyorMode implements IStringSerializable {
IMPORT("cover.conveyor.mode.import"),
EXPORT("cover.conveyor.mode.export");
Expand Down
Loading