mirror of
https://github.com/GTNewHorizons/JustEnoughCalculation.git
synced 2026-11-12 16:27:32 +00:00
Rebuilt gui framework
This commit is contained in:
1 parent
11d6c296d7
commit
b8a51edbdf
52 files changed
+771
-3662
No files matched your search
@@ -66,7 +66,7 @@ public class JecaConfig {
|
||||
case ListRecipeBlackList:
|
||||
return new String[0];
|
||||
case ListRecipeCategory:
|
||||
return new String[]{"crafting", "smelting"};
|
||||
return new String[]{"minecraft.crafting", "minecraft.smelting"};
|
||||
}
|
||||
return JecaConfig.empty;
|
||||
}
|
||||
@@ -104,7 +104,9 @@ public class JecaConfig {
|
||||
}
|
||||
}
|
||||
|
||||
public enum EnumType {Boolean, ListString, Error}
|
||||
public enum EnumType {
|
||||
Boolean, ListString, Error
|
||||
}
|
||||
|
||||
public static Object empty;
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import net.minecraft.world.World;
|
||||
public class JecaItem extends Item {
|
||||
public static JecaItem INSTANCE = new JecaItem();
|
||||
|
||||
public static final String NAME = "item_calculator";
|
||||
public static final String NAME = "itemCalculator";
|
||||
|
||||
public JecaItem() {
|
||||
setHasSubtypes(true);
|
||||
@@ -26,9 +26,7 @@ public class JecaItem extends Item {
|
||||
|
||||
@Override
|
||||
public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn) {
|
||||
playerIn.openGui(JustEnoughCalculation.instance, GuiHandler.GuiId.CALCULATOR, worldIn, 0, 0, 0);
|
||||
ItemStack stack = playerIn.inventory.getStackInSlot(0);
|
||||
//JustEnoughCalculation.log.info(stack==null ? "" : stack.getItem().getUnlocalizedName() + "-" + stack.getItemDamage());
|
||||
playerIn.openGui(JustEnoughCalculation.INSTANCE, GuiHandler.GuiId.EDITOR, worldIn, 0, 0, 0);
|
||||
return itemStackIn;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package me.towdium.jecalculation;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import org.apache.commons.lang3.StringEscapeUtils;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class JecaTranslator {
|
||||
public static String format(String translateKey, Object... parameters){
|
||||
String buffer = I18n.format(translateKey, parameters);
|
||||
buffer = StringEscapeUtils.unescapeJava(buffer);
|
||||
return buffer.replace("\t", " ");
|
||||
}
|
||||
}
|
||||
@@ -3,38 +3,29 @@ package me.towdium.jecalculation;
|
||||
import cpw.mods.fml.common.Mod;
|
||||
import cpw.mods.fml.common.SidedProxy;
|
||||
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.common.network.NetworkCheckHandler;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry;
|
||||
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
|
||||
import cpw.mods.fml.common.registry.GameData;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import me.towdium.jecalculation.gui.GuiHandler;
|
||||
import me.towdium.jecalculation.nei.NEIPlugin;
|
||||
import me.towdium.jecalculation.network.IProxy;
|
||||
import me.towdium.jecalculation.network.packets.PacketCalculatorUpdate;
|
||||
import me.towdium.jecalculation.network.packets.PacketRecipeUpdate;
|
||||
import me.towdium.jecalculation.network.packets.PacketSyncRecord;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.oredict.ShapedOreRecipe;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Mod(modid = JustEnoughCalculation.Reference.MODID,
|
||||
name = JustEnoughCalculation.Reference.MODNAME,
|
||||
version = JustEnoughCalculation.Reference.VERSION,
|
||||
dependencies = "required-after:NotEnoughItems")
|
||||
public class JustEnoughCalculation {
|
||||
@Mod.Instance(Reference.MODID)
|
||||
public static JustEnoughCalculation instance;
|
||||
public static JustEnoughCalculation INSTANCE;
|
||||
|
||||
@SidedProxy(modId = Reference.MODID,
|
||||
clientSide = "me.towdium.jecalculation.network.ProxyClient",
|
||||
@@ -44,53 +35,25 @@ public class JustEnoughCalculation {
|
||||
public static SimpleNetworkWrapper network;
|
||||
public static Logger logger = LogManager.getLogger(Reference.MODID);
|
||||
|
||||
@NetworkCheckHandler
|
||||
public static boolean networkCheck(Map<String, String> mods, Side s) {
|
||||
return s == Side.SERVER || mods.containsKey(Reference.MODID);
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public static void initPre(FMLPreInitializationEvent event) {
|
||||
JecaConfig.preInit(event);
|
||||
GameRegistry.registerItem(JecaItem.INSTANCE, JecaItem.NAME);
|
||||
network = NetworkRegistry.INSTANCE.newSimpleChannel(Reference.MODID);
|
||||
network.registerMessage(PacketCalculatorUpdate.class, PacketCalculatorUpdate.class, 1, Side.SERVER);
|
||||
network.registerMessage(PacketRecipeUpdate.class, PacketRecipeUpdate.class, 2, Side.SERVER);
|
||||
network.registerMessage(PacketSyncRecord.class, PacketSyncRecord.class, 3, Side.CLIENT);
|
||||
network.registerMessage(PacketSyncRecord.class, PacketSyncRecord.class, 4, Side.SERVER);
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public static void iniFt(FMLInitializationEvent event) {
|
||||
/*if(event.getSide().isClient()){
|
||||
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().
|
||||
register(itemCalculator, 0, new ModelResourceLocation(Reference.MODID + ":" + itemCalculator.getUnlocalizedName().substring(5), "inventory"));
|
||||
}*/
|
||||
ShapedOreRecipe recipe = new ShapedOreRecipe(new ItemStack(JecaItem.INSTANCE), "SIS", "SRS", "SOS", 'S',
|
||||
"stone", 'I', "dyeBlack", 'R', "dustRedstone", 'O', "ingotIron") {
|
||||
{
|
||||
try {
|
||||
Field f = ShapedOreRecipe.class.getDeclaredField("input");
|
||||
f.setAccessible(true);
|
||||
Object[] o = (Object[]) f.get(this);
|
||||
if (o[1] instanceof ArrayList) {
|
||||
ArrayList<ItemStack> buffer = (ArrayList<ItemStack>) o[1];
|
||||
ArrayList<ItemStack> a = new ArrayList<ItemStack>(buffer);
|
||||
Item i = GameRegistry.findItem("Botania", "dye");
|
||||
if (i != null)
|
||||
a.add(new ItemStack(i, 1, 15));
|
||||
o[1] = a;
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
};
|
||||
GameRegistry.addRecipe(recipe);
|
||||
public static void init(FMLInitializationEvent event) {
|
||||
NetworkRegistry.INSTANCE.registerGuiHandler(INSTANCE, new GuiHandler());
|
||||
proxy.init();
|
||||
|
||||
//DefaultOverlayHandler
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public static void postInit(FMLPostInitializationEvent event) {
|
||||
NEIPlugin.init();
|
||||
}
|
||||
|
||||
|
||||
public static class Reference {
|
||||
public static final String MODID = "jecalculation";
|
||||
public static final String MODNAME = "Just Enough Calculation";
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
package me.towdium.jecalculation.core;
|
||||
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
* This is calculating core v3.0, I call it global coordinating calculation XD.
|
||||
* The procudure might be more complex, but can avoid some unexpected results.
|
||||
*/
|
||||
|
||||
public class Calculator {
|
||||
List<CostRecord> costRecords;
|
||||
|
||||
public Calculator(ItemStack itemStack, long amount) {
|
||||
int count = 0;
|
||||
costRecords = new ArrayList<>();
|
||||
costRecords.add(new CostRecord(new ItemRecord(itemStack, amount, false)));
|
||||
List<ItemRecord> cancellableItems = costRecords.get(0).getCancellableItems();
|
||||
LOOP2:
|
||||
while (cancellableItems.size() != 0) {
|
||||
if (count > 100) {
|
||||
return;
|
||||
}
|
||||
// all the items possible tp cancel
|
||||
for (ItemRecord itemRecord : cancellableItems) {
|
||||
// all the recipes for one item
|
||||
LOOP1:
|
||||
for (Recipe recipe : JustEnoughCalculation.proxy.getPlayerHandler()
|
||||
.getAllRecipeOf(itemRecord.toItemStack(), null)) {
|
||||
long times = getCount(itemRecord, recipe);
|
||||
ItemRecord buffer = itemRecord.copy();
|
||||
buffer.amount = recipe.getOutputAmount(buffer.toItemStack()) * times;
|
||||
CostRecord record = new CostRecord(costRecords.get(costRecords.size() - 1),
|
||||
new CostRecord(recipe, times, itemRecord.approx, buffer));
|
||||
for (CostRecord costRecord : costRecords) {
|
||||
if (costRecord.equals(record)) {
|
||||
continue LOOP1;
|
||||
}
|
||||
costRecords.add(record);
|
||||
count++;
|
||||
cancellableItems = record.getCancellableItems();
|
||||
continue LOOP2;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public CostRecord getCost() {
|
||||
return costRecords.get(costRecords.size() - 1);
|
||||
}
|
||||
|
||||
protected long getCount(ItemRecord itemRecord, Recipe recipe) {
|
||||
long a = recipe.getOutputAmount(itemRecord.toItemStack());
|
||||
return (long) Math.ceil(itemRecord.amount / (double) a);
|
||||
}
|
||||
}
|
||||
@@ -1,255 +0,0 @@
|
||||
package me.towdium.jecalculation.core;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class CostRecord {
|
||||
private List<ItemRecord> output;
|
||||
private List<ItemRecord> input;
|
||||
private List<ItemRecord> catalyst;
|
||||
private List<ItemRecord> procedure;
|
||||
|
||||
public CostRecord(ItemRecord itemRecord) {
|
||||
output = new ArrayList<>();
|
||||
input = new ArrayList<>();
|
||||
catalyst = new LinkedList<>();
|
||||
procedure = new ArrayList<>();
|
||||
input.add(itemRecord);
|
||||
}
|
||||
|
||||
public CostRecord(Recipe recipe, long count, boolean approx, ItemRecord dest) {
|
||||
output = new ArrayList<>();
|
||||
input = new ArrayList<>();
|
||||
catalyst = new LinkedList<>();
|
||||
procedure = new ArrayList<>();
|
||||
boolean b = recipe.isApprox() || approx;
|
||||
for (ItemStack itemStack : recipe.output) {
|
||||
if (itemStack != null) {
|
||||
ItemRecord record = new ItemRecord(itemStack, count);
|
||||
record.approx = b;
|
||||
output.add(record);
|
||||
}
|
||||
}
|
||||
for (ItemStack itemStack : recipe.input) {
|
||||
if (itemStack != null) {
|
||||
ItemRecord record = new ItemRecord(itemStack, count);
|
||||
record.approx = b;
|
||||
input.add(record);
|
||||
record = new ItemRecord(itemStack);
|
||||
record.approx = b;
|
||||
catalyst.add(record);
|
||||
}
|
||||
}
|
||||
procedure.add(dest);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate CostRecord merging two CostRecords
|
||||
* ItemRecord with amount 0 may be left there
|
||||
*/
|
||||
public CostRecord(CostRecord costRecord1, CostRecord costRecord2) {
|
||||
output = new ArrayList<>();
|
||||
for (ItemRecord record : costRecord1.output) {
|
||||
output.add(record.copy());
|
||||
}
|
||||
input = new ArrayList<>();
|
||||
for (ItemRecord record : costRecord1.input) {
|
||||
input.add(record.copy());
|
||||
}
|
||||
catalyst = new LinkedList<>();
|
||||
for (ItemRecord record : costRecord1.catalyst) {
|
||||
catalyst.add(record.copy());
|
||||
}
|
||||
procedure = new ArrayList<>();
|
||||
for (ItemRecord record : costRecord1.procedure) {
|
||||
procedure.add(record.copy());
|
||||
}
|
||||
for (ItemRecord record : costRecord2.procedure) {
|
||||
procedure.add(record.copy());
|
||||
}
|
||||
// merge output
|
||||
LOOP:
|
||||
for (ItemRecord itemRecordAdd : costRecord2.output) {
|
||||
for (ItemRecord itemRecordExt : output) {
|
||||
if (itemRecordAdd.isSameType(itemRecordExt)) {
|
||||
itemRecordExt.add(itemRecordAdd);
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
output.add(itemRecordAdd.copy());
|
||||
}
|
||||
// merge input
|
||||
LOOP:
|
||||
for (ItemRecord itemRecordAdd : costRecord2.input) {
|
||||
for (ItemRecord itemRecordExt : input) {
|
||||
if (itemRecordAdd.isSameType(itemRecordExt)) {
|
||||
itemRecordExt.add(itemRecordAdd);
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
input.add(itemRecordAdd.copy());
|
||||
}
|
||||
// cancel catalyst by output
|
||||
LOOP:
|
||||
for (ItemRecord itemRecordAdd : costRecord2.output) {
|
||||
for (int i = 0; i < catalyst.size(); i++) {
|
||||
ItemRecord itemRecordExt = catalyst.get(i);
|
||||
if (itemRecordAdd.isSameType(itemRecordExt) && itemRecordExt.amount <= itemRecordAdd.amount) {
|
||||
catalyst.remove(i);
|
||||
continue LOOP;
|
||||
} else if (itemRecordAdd.isSameType(itemRecordExt)) {
|
||||
itemRecordExt.minus(itemRecordAdd);
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
}
|
||||
// merge catalyst
|
||||
LOOP:
|
||||
for (ItemRecord itemRecordAdd : costRecord2.catalyst) {
|
||||
for (ItemRecord itemRecordExt : catalyst) {
|
||||
if (itemRecordAdd.isSameType(itemRecordExt)) {
|
||||
itemRecordExt.add(itemRecordAdd);
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
catalyst.add(itemRecordAdd.copy());
|
||||
}
|
||||
// cancel input and output
|
||||
for (ItemRecord itemRecordIn : input) {
|
||||
for (ItemRecord itemRecordOut : output) {
|
||||
if (itemRecordIn.isSameType(itemRecordOut)) {
|
||||
itemRecordIn.cancel(itemRecordOut);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImmutableList<ItemRecord> getCancellableItems() {
|
||||
ImmutableList.Builder<ItemRecord> builder = new ImmutableList.Builder<>();
|
||||
for (ItemRecord itemRecord : input) {
|
||||
if (!itemRecord.isLocked() && itemRecord.amount != 0) {
|
||||
builder.add(itemRecord);
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public ImmutableList<ItemStack> getOutputStack() {
|
||||
ImmutableList.Builder<ItemStack> builder = new ImmutableList.Builder<>();
|
||||
for (ItemRecord itemRecord : output) {
|
||||
if (itemRecord.amount != 0) {
|
||||
builder.add(itemRecord.toItemStack());
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public ImmutableList<ItemStack> getProcedureStack() {
|
||||
ImmutableList.Builder<ItemStack> builder = new ImmutableList.Builder<>();
|
||||
for (int i = procedure.size() - 1; i >= 0; i--) {
|
||||
ItemRecord itemRecord = procedure.get(i);
|
||||
if (itemRecord.amount != 0) {
|
||||
builder.add(itemRecord.toItemStack());
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public ImmutableList<ItemStack> getInputStack() {
|
||||
ImmutableList.Builder<ItemStack> builder = new ImmutableList.Builder<>();
|
||||
for (ItemRecord itemRecord : input) {
|
||||
if (itemRecord.amount != 0) {
|
||||
builder.add(itemRecord.toItemStack());
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public ImmutableList<ItemStack> getCatalystStack() {
|
||||
ImmutableList.Builder<ItemStack> builder = new ImmutableList.Builder<>();
|
||||
LOOP:
|
||||
for (ItemRecord itemRecord : catalyst) {
|
||||
if (itemRecord.amount != 0) {
|
||||
for (ItemRecord record : input) {
|
||||
if (itemRecord.isSameType(record) && record.amount != 0) {
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
ItemRecord buffer = itemRecord.copy();
|
||||
//buffer.amount=0;
|
||||
ItemStack itemStack = buffer.toItemStack();
|
||||
//itemStack.getTagCompound().setBoolean("mark", true);
|
||||
builder.add(itemStack);
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof CostRecord) {
|
||||
LOOP:
|
||||
for (ItemRecord itemRecordIn : output) {
|
||||
for (ItemRecord itemRecordExt : ((CostRecord) obj).output) {
|
||||
if (itemRecordExt.isSameType(itemRecordIn)) {
|
||||
if (itemRecordExt.amount != itemRecordIn.amount) {
|
||||
return false;
|
||||
} else {
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
LOOP:
|
||||
for (ItemRecord itemRecordIn : input) {
|
||||
for (ItemRecord itemRecordExt : ((CostRecord) obj).input) {
|
||||
if (itemRecordExt.isSameType(itemRecordIn)) {
|
||||
if (itemRecordExt.amount != itemRecordIn.amount) {
|
||||
return false;
|
||||
} else {
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
LOOP:
|
||||
for (ItemRecord itemRecordIn : ((CostRecord) obj).output) {
|
||||
for (ItemRecord itemRecordExt : output) {
|
||||
if (itemRecordExt.isSameType(itemRecordIn)) {
|
||||
if (itemRecordExt.amount != itemRecordIn.amount) {
|
||||
return false;
|
||||
} else {
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
LOOP:
|
||||
for (ItemRecord itemRecordIn : ((CostRecord) obj).input) {
|
||||
for (ItemRecord itemRecordExt : input) {
|
||||
if (itemRecordExt.isSameType(itemRecordIn)) {
|
||||
if (itemRecordExt.amount != itemRecordIn.amount) {
|
||||
return false;
|
||||
} else {
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,132 +0,0 @@
|
||||
package me.towdium.jecalculation.core;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class ItemRecord {
|
||||
Item item;
|
||||
int meta;
|
||||
long amount;
|
||||
boolean approx;
|
||||
boolean locked;
|
||||
|
||||
/**
|
||||
* Generate ItemRecord based on the ItemStack and multiply the amount
|
||||
*/
|
||||
public ItemRecord(ItemStack itemStack, long multiplier) {
|
||||
item = itemStack.getItem();
|
||||
meta = itemStack.getItemDamage();
|
||||
amount = ItemStackWrapper.getUnifiedAmount(itemStack) * multiplier;
|
||||
approx = itemStack.hasTagCompound() && itemStack.getTagCompound().getBoolean("percentage");
|
||||
}
|
||||
|
||||
public ItemRecord(ItemStack itemStack) {
|
||||
this(itemStack, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate ItemRecord with customized amount
|
||||
*/
|
||||
public ItemRecord(ItemStack itemStack, long amount, boolean approx) {
|
||||
item = itemStack.getItem();
|
||||
meta = itemStack.getItemDamage();
|
||||
this.amount = amount;
|
||||
this.approx = approx;
|
||||
}
|
||||
|
||||
public ItemRecord(Item item, int meta, long amount, boolean approx) {
|
||||
this.item = item;
|
||||
this.meta = meta;
|
||||
this.amount = amount;
|
||||
this.approx = approx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "itemRecord:" + item.getUnlocalizedName() + " x " + amount;
|
||||
}
|
||||
|
||||
protected int getOutputAmount(Recipe recipe) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (recipe.output[i].getItem() == item && recipe.output[i].getItemDamage() == meta) {
|
||||
return ItemStackWrapper.getUnifiedAmount(recipe.output[i]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public boolean isSameType(ItemRecord record) {
|
||||
return item == record.item && meta == record.meta;
|
||||
}
|
||||
|
||||
public boolean add(ItemRecord record) {
|
||||
if (isSameType(record)) {
|
||||
amount += record.amount;
|
||||
approx = approx || record.approx;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean minus(ItemRecord record) {
|
||||
if (isSameType(record)) {
|
||||
amount -= record.amount;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean cancel(ItemRecord record) {
|
||||
if (isSameType(record)) {
|
||||
long i = amount > record.amount ? record.amount : amount;
|
||||
amount -= i;
|
||||
record.amount -= i;
|
||||
if (approx || record.approx) {
|
||||
approx = true;
|
||||
record.approx = true;
|
||||
}
|
||||
return i != 0;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public ItemRecord copy() {
|
||||
return new ItemRecord(item, meta, amount, approx);
|
||||
}
|
||||
|
||||
public ItemStack toItemStack() {
|
||||
ItemStack itemStack = new ItemStack(item, 1, meta);
|
||||
NBTTagCompound tagCompound = new NBTTagCompound();
|
||||
tagCompound.setLong("amount", amount);
|
||||
if (approx) {
|
||||
tagCompound.setBoolean("approx", true);
|
||||
}
|
||||
itemStack.setTagCompound(tagCompound);
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
public boolean isLocked() {
|
||||
return locked;
|
||||
}
|
||||
|
||||
public void setLocked(boolean locked) {
|
||||
this.locked = locked;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof ItemRecord) {
|
||||
ItemRecord record = ((ItemRecord) obj);
|
||||
return record.approx == approx && record.item == item && record.amount == amount && record.meta == meta;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package me.towdium.jecalculation.core;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ItemStackHelper {
|
||||
public static boolean isTypeEqual(ItemStack one, ItemStack two) {
|
||||
return one != null && two != null && one.getItem() == two.getItem() && getMetadata(one) == getMetadata(two);
|
||||
}
|
||||
|
||||
private static int getMetadata(ItemStack stack) {
|
||||
return stack.getItemDamage();
|
||||
}
|
||||
}
|
||||
@@ -1,326 +0,0 @@
|
||||
package me.towdium.jecalculation.core;
|
||||
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class ItemStackWrapper {
|
||||
|
||||
public static boolean isTypeEqual(ItemStack one, ItemStack two) {
|
||||
return one != null && two != null && one.getItem() == two.getItem() &&
|
||||
one.getItemDamage() == two.getItemDamage();
|
||||
}
|
||||
|
||||
public static boolean isStackEqual(ItemStack one, ItemStack two) {
|
||||
return ItemStack.areItemStacksEqual(one, two);
|
||||
}
|
||||
|
||||
public static int getUnifiedAmount(ItemStack itemStack) {
|
||||
if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("percentage")) {
|
||||
return itemStack.getTagCompound().getInteger("percentage");
|
||||
} else {
|
||||
return itemStack.stackSize * 100;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getDisplayAmount(ItemStack itemStack) {
|
||||
if (itemStack != null) {
|
||||
if (itemStack.getTagCompound() != null) {
|
||||
if (itemStack.getTagCompound().getBoolean("mark")) {
|
||||
return "";
|
||||
}
|
||||
long l = itemStack.getTagCompound().hasKey("amount") ?
|
||||
itemStack.getTagCompound().getLong("amount") :
|
||||
-1;
|
||||
if (l == 0 && itemStack.stackSize == 0) {
|
||||
return "";
|
||||
}
|
||||
int i = itemStack.getTagCompound().getInteger("percentage");
|
||||
if (i != 0) {
|
||||
return i + "%";
|
||||
} else {
|
||||
if (l == -1) {
|
||||
return String.valueOf(itemStack.stackSize);
|
||||
}
|
||||
return getSimplifiedString((l + 99) / 100, itemStack.getTagCompound().getBoolean("approx"));
|
||||
}
|
||||
} else {
|
||||
return String.valueOf(itemStack.stackSize);
|
||||
}
|
||||
} else
|
||||
return "";
|
||||
}
|
||||
|
||||
public static ItemStack toPercentage(ItemStack itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
NBT.setInt(itemStack, "percentage", itemStack.stackSize * 100);
|
||||
itemStack.stackSize = 1;
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
public static ItemStack toNormal(ItemStack itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
if (itemStack.hasTagCompound()) {
|
||||
int i = itemStack.getTagCompound().getInteger("percentage");
|
||||
itemStack.stackSize = (i + 99) / 100;
|
||||
itemStack.setTagCompound(null);
|
||||
} else {
|
||||
itemStack.stackSize = 1;
|
||||
}
|
||||
itemStack.setTagCompound(null);
|
||||
ItemStackWrapper.NBT.setBool(itemStack, JustEnoughCalculation.Reference.MODID, true);
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
public static String getSimplifiedString(long l, boolean approx) {
|
||||
String s;
|
||||
if (approx) {
|
||||
if (l < 999) {
|
||||
s = String.valueOf(l);
|
||||
} else if (l < 9999) {
|
||||
s = String.format("≈%.1fK", (double) l / 1000);
|
||||
} else if (l < 99999) {
|
||||
s = String.format("≈%.0fK", (double) l / 1000);
|
||||
} else if (l < 999999) {
|
||||
s = String.format("≈%.1fM", (double) l / 1000000);
|
||||
} else if (l < 9999999) {
|
||||
s = String.format("≈%.1fM", (double) l / 1000000);
|
||||
} else if (l < 99999999) {
|
||||
s = String.format("≈%.0fM", (double) l / 1000000);
|
||||
} else if (l < 999999999) {
|
||||
s = String.format("≈%.1fB", (double) l / 1000000000);
|
||||
} else if (l < 9999999999L) {
|
||||
s = String.format("≈%.1fB", (double) l / 1000000000);
|
||||
} else if (l < 99999999999L) {
|
||||
s = String.format("≈%.0fB", (double) l / 1000000000);
|
||||
} else if (l < 999999999999L) {
|
||||
s = String.format("≈%.1fT", (double) l / 1000000000000L);
|
||||
} else if (l < 9999999999999L) {
|
||||
s = String.format("≈%.1fT", (double) l / 1000000000000L);
|
||||
} else if (l < 99999999999999L) {
|
||||
s = String.format("≈%.0fT", (double) l / 1000000000000L);
|
||||
} else if (l < 999999999999999L) {
|
||||
s = String.format("≈%.1fG", (double) l / 1000000000000000L);
|
||||
} else if (l < 9999999999999999L) {
|
||||
s = String.format("≈%.1fG", (double) l / 1000000000000000L);
|
||||
} else {
|
||||
s = String.format("≈%.0fG", (double) l / 1000000000000000L);
|
||||
}
|
||||
} else {
|
||||
if (l < 999) {
|
||||
s = String.valueOf(l);
|
||||
} else if (l < 9999) {
|
||||
s = String.format("%.2fK", (double) l / 1000);
|
||||
} else if (l < 99999) {
|
||||
s = String.format("%.1fK", (double) l / 1000);
|
||||
} else if (l < 999999) {
|
||||
s = String.format("%.0fK", (double) l / 1000);
|
||||
} else if (l < 9999999) {
|
||||
s = String.format("%.2fM", (double) l / 1000000);
|
||||
} else if (l < 99999999) {
|
||||
s = String.format("%.1fM", (double) l / 1000000);
|
||||
} else if (l < 999999999) {
|
||||
s = String.format("%.0fB", (double) l / 1000000);
|
||||
} else if (l < 9999999999L) {
|
||||
s = String.format("%.2fB", (double) l / 1000000000);
|
||||
} else if (l < 99999999999L) {
|
||||
s = String.format("%.1fB", (double) l / 1000000000);
|
||||
} else if (l < 999999999999L) {
|
||||
s = String.format("%.0fT", (double) l / 1000000000);
|
||||
} else if (l < 9999999999999L) {
|
||||
s = String.format("%.2fT", (double) l / 1000000000000L);
|
||||
} else if (l < 99999999999999L) {
|
||||
s = String.format("%.1fT", (double) l / 1000000000000L);
|
||||
} else if (l < 999999999999999L) {
|
||||
s = String.format("%.0fG", (double) l / 1000000000000L);
|
||||
} else if (l < 9999999999999999L) {
|
||||
s = String.format("%.2fG", (double) l / 1000000000000000L);
|
||||
} else if (l < 99999999999990999L) {
|
||||
s = String.format("%.1fG", (double) l / 1000000000000000L);
|
||||
} else {
|
||||
s = String.format("%.0fG", (double) l / 1000000000000000L);
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
public static long getGhostItemAmount(ItemStack itemStack) {
|
||||
if (itemStack.hasTagCompound()) {
|
||||
long l = itemStack.getTagCompound().getLong("amount");
|
||||
return (l + 99) / 100;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class NBT {
|
||||
public static void initNBT(ItemStack itemStack) {
|
||||
if (!itemStack.hasTagCompound()) {
|
||||
itemStack.setTagCompound(new NBTTagCompound());
|
||||
}
|
||||
}
|
||||
|
||||
public static void setItem(ItemStack dest, String key, ItemStack content) {
|
||||
initNBT(dest);
|
||||
NBTTagCompound buffer = new NBTTagCompound();
|
||||
if (content != null) {
|
||||
content.writeToNBT(buffer);
|
||||
dest.getTagCompound().setTag(key, buffer);
|
||||
} else {
|
||||
dest.getTagCompound().removeTag(key);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static ItemStack getItem(ItemStack itemStack, String key) {
|
||||
NBTTagCompound tagCompound = itemStack.getTagCompound();
|
||||
if (tagCompound == null) {
|
||||
return null;
|
||||
}
|
||||
NBTTagCompound itemTagCompound = tagCompound.getCompoundTag(key);
|
||||
if (itemTagCompound == null) {
|
||||
return null;
|
||||
}
|
||||
return ItemStack.loadItemStackFromNBT(itemTagCompound);
|
||||
}
|
||||
|
||||
public static void setString(ItemStack dest, String key, String value) {
|
||||
initNBT(dest);
|
||||
dest.getTagCompound().setString(key, value);
|
||||
}
|
||||
|
||||
public static void setInt(ItemStack dest, String key, int value) {
|
||||
initNBT(dest);
|
||||
dest.getTagCompound().setInteger(key, value);
|
||||
}
|
||||
|
||||
public static void setBool(ItemStack dest, String key, boolean value) {
|
||||
initNBT(dest);
|
||||
dest.getTagCompound().setBoolean(key, value);
|
||||
}
|
||||
|
||||
public static void setLong(ItemStack dest, String key, long value) {
|
||||
initNBT(dest);
|
||||
dest.getTagCompound().setLong(key, value);
|
||||
}
|
||||
|
||||
public static String getString(ItemStack dest, String key) {
|
||||
if (dest.getTagCompound() != null) {
|
||||
return dest.getTagCompound().getString(key);
|
||||
} else
|
||||
return "";
|
||||
}
|
||||
|
||||
public static boolean getBool(ItemStack dest, String key) {
|
||||
return dest.getTagCompound() != null && dest.getTagCompound().getBoolean(key);
|
||||
}
|
||||
|
||||
public static int getInt(ItemStack dest, String key) {
|
||||
if (dest.getTagCompound() != null) {
|
||||
return dest.getTagCompound().getInteger(key);
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static long getLong(ItemStack dest, String key) {
|
||||
if (dest.getTagCompound() != null) {
|
||||
return dest.getTagCompound().getLong(key);
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Click {
|
||||
public static boolean leftClick(ItemStack itemStack, boolean doChange) {
|
||||
if (itemStack == null || itemStack.stackSize >= 64) {
|
||||
return false;
|
||||
} else {
|
||||
if (doChange) {
|
||||
if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("percentage")) {
|
||||
itemStack.getTagCompound()
|
||||
.setInteger("percentage", itemStack.getTagCompound().getInteger("percentage") + 1);
|
||||
} else {
|
||||
itemStack.stackSize += 1;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean leftShift(ItemStack itemStack, boolean doChange) {
|
||||
if (itemStack == null || itemStack.stackSize >= 64) {
|
||||
return false;
|
||||
} else {
|
||||
if (doChange) {
|
||||
if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("percentage")) {
|
||||
int i = itemStack.getTagCompound().getInteger("percentage");
|
||||
itemStack.getTagCompound().setInteger("percentage", i == 1 ? 10 : i + 10);
|
||||
} else {
|
||||
if (itemStack.stackSize == 1) {
|
||||
itemStack.stackSize = 10;
|
||||
} else if (itemStack.stackSize <= 54) {
|
||||
itemStack.stackSize += 10;
|
||||
} else {
|
||||
itemStack.stackSize = 64;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean rightClick(ItemStack itemStack, boolean doChange) {
|
||||
if (itemStack == null) {
|
||||
return false;
|
||||
} else {
|
||||
if (doChange) {
|
||||
if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("percentage")) {
|
||||
int i = itemStack.getTagCompound().getInteger("percentage");
|
||||
if (i == 1 || i == 0) {
|
||||
itemStack.stackSize = 0;
|
||||
return true;
|
||||
}
|
||||
itemStack.getTagCompound().setInteger("percentage", --i);
|
||||
} else {
|
||||
itemStack.stackSize -= 1;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean rightShift(ItemStack itemStack, boolean doChange) {
|
||||
if (itemStack == null) {
|
||||
return false;
|
||||
} else {
|
||||
if (doChange) {
|
||||
if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("percentage")) {
|
||||
int i = itemStack.getTagCompound().getInteger("percentage");
|
||||
if (i == 0 || i == 1) {
|
||||
itemStack.stackSize = 0;
|
||||
return true;
|
||||
}
|
||||
itemStack.getTagCompound().setInteger("percentage", i <= 10 ? 1 : i - 10);
|
||||
} else {
|
||||
if (itemStack.stackSize == 1) {
|
||||
itemStack.stackSize = 0;
|
||||
} else if (itemStack.stackSize <= 10) {
|
||||
itemStack.stackSize = 1;
|
||||
} else {
|
||||
itemStack.stackSize -= 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,285 +0,0 @@
|
||||
package me.towdium.jecalculation.core;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import cpw.mods.fml.common.network.ByteBufUtils;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class Recipe {
|
||||
ItemStack[] output;
|
||||
ItemStack[] input;
|
||||
|
||||
public Recipe(ItemStack[] output, ItemStack[] input) {
|
||||
if (output.length != 4 || input.length != 12) {
|
||||
throw new IllegalArgumentException("Incorrect array size");
|
||||
}
|
||||
this.output = new ItemStack[4];
|
||||
for (int i = 0; i < 4; i++) {
|
||||
ItemStack itemstack = output[i];
|
||||
if (itemstack != null) {
|
||||
boolean flag = false;
|
||||
for (int j = 0; j < i; j++) {
|
||||
if (this.output[j] != null && ItemStackWrapper.isTypeEqual(this.output[j], itemstack)) {
|
||||
this.output[j].stackSize += itemstack.stackSize;
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!flag) {
|
||||
this.output[i] = itemstack.copy();
|
||||
}
|
||||
}
|
||||
}
|
||||
this.input = new ItemStack[12];
|
||||
for (ItemStack itemstack : input) {
|
||||
if (itemstack != null) {
|
||||
for (int i = 0; i < 12; i++) {
|
||||
if (ItemStackWrapper.isTypeEqual(this.input[i], itemstack)) {
|
||||
this.input[i].stackSize += itemstack.stackSize;
|
||||
break;
|
||||
} else if (this.input[i] == null) {
|
||||
this.input[i] = itemstack.copy();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack getOutput(ItemStack itemStack) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (ItemStackWrapper.isTypeEqual(output[i], itemStack)) {
|
||||
return output[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public int getOutputIndex(ItemStack itemStack) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (ItemStackWrapper.isTypeEqual(output[i], itemStack)) {
|
||||
for (ItemStack buffer : input) {
|
||||
if (ItemStackWrapper.isTypeEqual(buffer, output[i]) &&
|
||||
ItemStackWrapper.getUnifiedAmount(output[i]) < ItemStackWrapper.getUnifiedAmount(buffer)) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public int getExactInputIndex(ItemStack itemStack) {
|
||||
for (int i = 0; i < 12; i++) {
|
||||
if (ItemStackWrapper.isStackEqual(input[i], itemStack)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public int getInputIndex(ItemStack itemStack) {
|
||||
for (int i = 0; i < 12; i++) {
|
||||
if (ItemStackWrapper.isTypeEqual(input[i], itemStack)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public boolean getHasExactInput(ItemStack itemStack) {
|
||||
return getExactInputIndex(itemStack) != -1;
|
||||
}
|
||||
|
||||
public int getOutputAmount(ItemStack itemStack) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (ItemStackWrapper.isTypeEqual(output[i], itemStack)) {
|
||||
return ItemStackWrapper.getUnifiedAmount(output[i]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getInputAmount(ItemStack itemStack) {
|
||||
for (int i = 0; i < 12; i++) {
|
||||
if (ItemStackWrapper.isTypeEqual(input[i], itemStack)) {
|
||||
return ItemStackWrapper.getUnifiedAmount(input[i]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public boolean getHasOutput(ItemStack itemStack) {
|
||||
return getOutputIndex(itemStack) != -1;
|
||||
}
|
||||
|
||||
public boolean getHasInput(ItemStack itemStack) {
|
||||
return getInputIndex(itemStack) != -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Recipe) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (!ItemStackWrapper.isStackEqual(output[i], ((Recipe) obj).output[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 12; i++) {
|
||||
if (!ItemStackWrapper.isStackEqual(input[i], ((Recipe) obj).input[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isOutputEqual(Recipe recipe) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (!ItemStackWrapper.isStackEqual(output[i], recipe.output[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public ImmutableList<ItemStack> getOutput() {
|
||||
ImmutableList.Builder<ItemStack> builder = new ImmutableList.Builder<>();
|
||||
for (ItemStack itemStack : output) {
|
||||
if (itemStack != null) {
|
||||
builder.add(itemStack.copy());
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public ImmutableList<ItemStack> getInput() {
|
||||
ImmutableList.Builder<ItemStack> builder = new ImmutableList.Builder<>();
|
||||
for (ItemStack itemStack : input) {
|
||||
if (itemStack != null) {
|
||||
builder.add(itemStack.copy());
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public boolean isApprox() {
|
||||
for (ItemStack itemstack : input) {
|
||||
if (itemstack != null && itemstack.hasTagCompound() && itemstack.getTagCompound().hasKey("percentage")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
for (ItemStack itemstack : output) {
|
||||
if (itemstack != null && itemstack.hasTagCompound() && itemstack.getTagCompound().hasKey("percentage")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static class ByteBufUtl {
|
||||
public static Recipe fromByte(ByteBuf buf) {
|
||||
short a = buf.readShort();
|
||||
if (a == 0) {
|
||||
return null;
|
||||
}
|
||||
short b = buf.readShort();
|
||||
ItemStack[] output = new ItemStack[4];
|
||||
ItemStack[] input = new ItemStack[12];
|
||||
for (int i = 0; i < a; i++) {
|
||||
output[i] = ByteBufUtils.readItemStack(buf);
|
||||
}
|
||||
for (int i = 0; i < b; i++) {
|
||||
input[i] = ByteBufUtils.readItemStack(buf);
|
||||
}
|
||||
return new Recipe(output, input);
|
||||
}
|
||||
|
||||
public static void toByte(ByteBuf buf, Recipe recipe) {
|
||||
if (recipe == null) {
|
||||
buf.writeShort(0);
|
||||
return;
|
||||
}
|
||||
short a = 0;
|
||||
short b = 0;
|
||||
for (ItemStack itemStack : recipe.output) {
|
||||
if (itemStack != null) {
|
||||
a++;
|
||||
}
|
||||
}
|
||||
for (ItemStack itemStack : recipe.input) {
|
||||
if (itemStack != null) {
|
||||
b++;
|
||||
}
|
||||
}
|
||||
buf.writeShort(a);
|
||||
buf.writeShort(b);
|
||||
ItemStack[] output1 = recipe.output;
|
||||
for (ItemStack itemStack : output1) {
|
||||
if (itemStack != null) {
|
||||
ByteBufUtils.writeItemStack(buf, itemStack);
|
||||
}
|
||||
}
|
||||
ItemStack[] input1 = recipe.input;
|
||||
for (ItemStack itemStack : input1) {
|
||||
if (itemStack != null) {
|
||||
ByteBufUtils.writeItemStack(buf, itemStack);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class NBTUtl {
|
||||
public static NBTTagCompound toNBT(Recipe recipe) {
|
||||
NBTTagCompound tagCompound = new NBTTagCompound();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (recipe.output[i] != null) {
|
||||
NBTTagCompound buffer = new NBTTagCompound();
|
||||
recipe.output[i].writeToNBT(buffer);
|
||||
tagCompound.setTag(i + "", buffer);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 12; i++) {
|
||||
if (recipe.input[i] != null) {
|
||||
NBTTagCompound buffer = new NBTTagCompound();
|
||||
recipe.input[i].writeToNBT(buffer);
|
||||
tagCompound.setTag((i + 4) + "", buffer);
|
||||
}
|
||||
}
|
||||
return tagCompound;
|
||||
}
|
||||
|
||||
public static Recipe fromNBT(NBTTagCompound tagCompound) {
|
||||
ItemStack[] output = new ItemStack[4];
|
||||
ItemStack[] input = new ItemStack[12];
|
||||
boolean inputNull = true;
|
||||
boolean outputNull = true;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
NBTTagCompound buffer = tagCompound.getCompoundTag(String.valueOf(i));
|
||||
if (buffer != null) {
|
||||
output[i] = ItemStack.loadItemStackFromNBT(buffer);
|
||||
if (output[i] != null) {
|
||||
outputNull = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 12; i++) {
|
||||
NBTTagCompound buffer = tagCompound.getCompoundTag(String.valueOf(i + 4));
|
||||
if (buffer != null) {
|
||||
input[i] = ItemStack.loadItemStackFromNBT(buffer);
|
||||
if (input[i] != null) {
|
||||
inputNull = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return inputNull || outputNull ? null : new Recipe(output, input);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
package me.towdium.jecalculation.event;
|
||||
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.EventPriority;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.gameevent.InputEvent;
|
||||
import me.towdium.jecalculation.gui.guis.calculator.GuiCalculator;
|
||||
import net.minecraftforge.client.event.GuiOpenEvent;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class GuiEventHandler {
|
||||
long time = new Date().getTime();
|
||||
|
||||
@SubscribeEvent(priority = EventPriority.HIGH)
|
||||
public void onMouseClick(InputEvent.MouseInputEvent event) {
|
||||
/*if(event.gui instanceof GuiRecipeEditor){
|
||||
if(new Date().getTime() - time < 200){
|
||||
event.setCanceled(true);
|
||||
return;
|
||||
}
|
||||
if (((GuiRecipeEditor) Minecraft.getMinecraft().currentScreen).getActiveSlot() != -1){
|
||||
GuiRecipeEditor guiContainer = (GuiRecipeEditor) event.gui;
|
||||
ItemStack itemStack = JEIPlugin.runtime.getItemListOverlay().getStackUnderMouse();
|
||||
Slot slot = ((GuiRecipeEditor) event.gui).inventorySlots.getSlot(((GuiRecipeEditor) event.gui).getActiveSlot());
|
||||
slot.putStack(itemStack == null ? null : itemStack.copy());
|
||||
if(Mouse.isButtonDown(0)){
|
||||
time = new Date().getTime();
|
||||
if(guiContainer.getSlotUnderMouse() != null){
|
||||
guiContainer.setActiveSlot(guiContainer.getSlotUnderMouse().getSlotIndex());
|
||||
event.gui.mc.thePlayer.playSound("random.click", 1f, 1f );
|
||||
event.setCanceled(true);
|
||||
return;
|
||||
}
|
||||
int y = guiContainer.height - Mouse.getEventY() * guiContainer.height / guiContainer.mc.displayHeight - 1;
|
||||
int x = Mouse.getEventX() * guiContainer.width / guiContainer.mc.displayWidth;
|
||||
boolean over = ((ItemListOverlay)JEIPlugin.runtime.getItemListOverlay()).isMouseOver(x, y);
|
||||
if(!over || (y>25 && y<guiContainer.height-15)){
|
||||
((GuiRecipeEditor) event.gui).setActiveSlot(-1);
|
||||
event.gui.mc.thePlayer.playSound("random.click", 1f, 1f );
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else
|
||||
if(event.gui instanceof GuiCalculator){
|
||||
if(new Date().getTime() - time < 200){
|
||||
event.setCanceled(true);
|
||||
return;
|
||||
}
|
||||
if (((GuiCalculator) event.gui).getActiveSlot() == 0){
|
||||
Slot slot = ((GuiCalculator) event.gui).inventorySlots.getSlot(0);
|
||||
ItemStack itemStack = JEIPlugin.runtime.getItemListOverlay().getStackUnderMouse();
|
||||
if(itemStack != null){
|
||||
itemStack = itemStack.copy();
|
||||
}
|
||||
if(itemStack != null){
|
||||
ItemStackWrapper.NBT.initNBT(itemStack);
|
||||
itemStack.getTagCompound().setBoolean("mark", true);
|
||||
}
|
||||
slot.putStack(itemStack == null ? null : itemStack);
|
||||
if (Mouse.isButtonDown(0)){
|
||||
time = new Date().getTime();
|
||||
Slot slot1 = ((GuiCalculator) event.gui).getSlotUnderMouse();
|
||||
if(slot1 != null){
|
||||
((GuiCalculator) event.gui).setActiveSlot(slot1.getSlotIndex());
|
||||
}else {
|
||||
((GuiCalculator) event.gui).setActiveSlot(-1);
|
||||
}
|
||||
((ContainerCalculator)((GuiCalculator) event.gui).inventorySlots).getPlayer().playSound("random.click", 1f, 1f );
|
||||
event.setCanceled(true);
|
||||
}
|
||||
} else if(((GuiCalculator) event.gui).getActiveSlot() != -1) {
|
||||
if (Mouse.isButtonDown(0)){
|
||||
Slot slot1 = ((GuiCalculator) event.gui).getSlotUnderMouse();
|
||||
if(slot1 != null){
|
||||
((GuiCalculator) event.gui).setActiveSlot(slot1.getSlotIndex());
|
||||
}else {
|
||||
((GuiCalculator) event.gui).setActiveSlot(-1);
|
||||
}
|
||||
((ContainerCalculator)((GuiCalculator) event.gui).inventorySlots).getPlayer().playSound("random.click", 1f, 1f );
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onOpen(GuiOpenEvent event) {
|
||||
if (event.gui instanceof GuiCalculator) {
|
||||
((GuiCalculator) event.gui).onOpen();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package me.towdium.jecalculation.event;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.gui.guis.calculator.ContainerCalculator;
|
||||
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent.LoadFromFile;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent.SaveToFile;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class PlayerEventHandler {
|
||||
@SubscribeEvent
|
||||
public void onLogin(LoadFromFile event) {
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().handleLogin(event);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onSave(SaveToFile event) {
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().handleSave(event);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onTooltip(ItemTooltipEvent event) {
|
||||
if (event.entityPlayer.openContainer instanceof ContainerCalculator) {
|
||||
long l = event.itemStack.hasTagCompound() ?
|
||||
(event.itemStack.getTagCompound().getLong("amount") + 99) / 100 :
|
||||
0;
|
||||
if (l > 999) {
|
||||
event.toolTip.add("Amount: " + l);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,47 +1,35 @@
|
||||
package me.towdium.jecalculation.gui;
|
||||
|
||||
import cpw.mods.fml.common.network.IGuiHandler;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.gui.commom.recipe.ContainerRecipe;
|
||||
import me.towdium.jecalculation.gui.guis.calculator.ContainerCalculator;
|
||||
import me.towdium.jecalculation.gui.guis.calculator.GuiCalculator;
|
||||
import me.towdium.jecalculation.gui.guis.recipeEditor.ContainerRecipeEditor;
|
||||
import me.towdium.jecalculation.gui.guis.recipeEditor.GuiRecipeEditor;
|
||||
import me.towdium.jecalculation.gui.guis.recipePicker.GuiRecipePicker;
|
||||
import me.towdium.jecalculation.gui.guis.recipeViewer.ContainerRecipeViewer;
|
||||
import me.towdium.jecalculation.gui.guis.recipeViewer.GuiRecipeViewer;
|
||||
import me.towdium.jecalculation.gui.guis.GuiCalculator;
|
||||
import me.towdium.jecalculation.gui.guis.GuiEditor;
|
||||
import me.towdium.jecalculation.gui.guis.GuiRecipeSearch;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class GuiHandler implements IGuiHandler {
|
||||
public static final class GuiId {
|
||||
public static final int CALCULATOR = 0;
|
||||
public static final int RECIPE_VIEWER = 1;
|
||||
public static final int RECIPE_EDITOR = 2;
|
||||
public static final int RECIPE_PICKER = 3;
|
||||
public static final int RECIPE_SEARCH = 1;
|
||||
public static final int EDITOR = 2;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
switch (ID) {
|
||||
public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
|
||||
switch (id) {
|
||||
case GuiId.CALCULATOR:
|
||||
return new GuiCalculator(new ContainerCalculator(player, player.getHeldItem()));
|
||||
case GuiId.RECIPE_VIEWER:
|
||||
return new GuiRecipeViewer(new ContainerRecipeViewer(), null);
|
||||
case GuiId.RECIPE_EDITOR:
|
||||
return new GuiRecipeEditor(new ContainerRecipeEditor(), null);
|
||||
case GuiId.RECIPE_PICKER:
|
||||
return new GuiRecipePicker(new ContainerRecipe(), null,
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().getAllRecipeIndex(null));
|
||||
return new GuiCalculator(null);
|
||||
case GuiId.RECIPE_SEARCH:
|
||||
return new GuiRecipeSearch(Minecraft.getMinecraft().currentScreen);
|
||||
case GuiId.EDITOR:
|
||||
return new GuiEditor(null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package me.towdium.jecalculation.gui;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.InventoryBasic;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class JecaContainer extends Container {
|
||||
InventoryBasic inventory;
|
||||
List<int[]> slotBuffer = new ArrayList<>();
|
||||
|
||||
public JecaContainer() {
|
||||
addSlots();
|
||||
int count = 0;
|
||||
int current = -1;
|
||||
for(int[] record: slotBuffer) {
|
||||
count += (record[4] * record[5]);
|
||||
}
|
||||
inventory = new InventoryBasic("Temp", false, count);
|
||||
for(int[] record: slotBuffer) {
|
||||
for(int a = 0; a < record[4]; a++) {
|
||||
for(int b=0; b < record[5];b++) {
|
||||
addSlotToContainer(new Slot(inventory, ++current, record[0]+b*record[2], record[1]+a*record[3]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer entityPlayer) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void addSlotSingle(int left, int top){
|
||||
slotBuffer.add(new int[]{left, top, 0, 0, 1, 1});
|
||||
}
|
||||
|
||||
protected void addSlotGroup(int left, int top, int intervalH, int intervalV, int sizeH, int sizeV){
|
||||
slotBuffer.add(new int[]{left, top, intervalH, intervalV, sizeH, sizeV});
|
||||
}
|
||||
|
||||
|
||||
protected abstract void addSlots();
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
package me.towdium.jecalculation.gui;
|
||||
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class JecaGuiContainer extends GuiContainer {
|
||||
GuiScreen parent;
|
||||
int activeSlot = -1;
|
||||
long timeStart = 0;
|
||||
|
||||
public JecaGuiContainer(Container inventorySlotsIn, GuiScreen parent) {
|
||||
super(inventorySlotsIn);
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public boolean setActiveSlot(int id) {
|
||||
if (id == -1 || getSizeSlotActive(id) != 0) {
|
||||
activeSlot = id;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public int getActiveSlot() {
|
||||
return activeSlot;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
|
||||
super.drawScreen(mouseX, mouseY, partialTicks);
|
||||
RenderHelper.disableStandardItemLighting(); // ?
|
||||
|
||||
drawToolTipScreen(mouseX, mouseY);
|
||||
RenderHelper.enableStandardItemLighting(); // >
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||
drawActiveSlot();
|
||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void keyTyped(char typedChar, int keyCode) {
|
||||
if (keyCode == 1) {
|
||||
if (activeSlot != -1) {
|
||||
setActiveSlot(-1);
|
||||
} else {
|
||||
mc.displayGuiScreen(parent);
|
||||
}
|
||||
} else {
|
||||
super.keyTyped(typedChar, keyCode);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseClicked(int i1, int i2, int i3) {
|
||||
if (activeSlot == -1) {
|
||||
Slot slot = getSlotUnderMouse();
|
||||
if (slot != null && setActiveSlot(slot.getSlotIndex())) {
|
||||
mc.thePlayer.playSound("gui.button.press", 0.2f, 1f);
|
||||
}
|
||||
super.mouseClicked(i1, i2, i3);
|
||||
} else {
|
||||
activeSlot = -1;
|
||||
mc.thePlayer.playSound("gui.button.press", 0.2f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* called by NEI when need display item name or tool tip
|
||||
*
|
||||
* @param stack current mouse over item
|
||||
*/
|
||||
public void handleMouseOverNEIItemPanel(ItemStack stack) {
|
||||
if (activeSlot != -1) {
|
||||
inventorySlots.getSlot(activeSlot).putStack(stack == null ? null : stack.copy());
|
||||
}
|
||||
}
|
||||
|
||||
protected void drawToolTipScreen(int mouseX, int mouseY) {
|
||||
boolean flagUnicode = mc.fontRenderer.getUnicodeFlag();
|
||||
boolean flagOver = false;
|
||||
mc.fontRenderer.setUnicodeFlag(true);
|
||||
//noinspection unchecked
|
||||
for (GuiButton button : (List<GuiButton>) buttonList) {
|
||||
String tooltip = getButtonTooltip(button.id);
|
||||
if (tooltip != null) {
|
||||
mc.fontRenderer
|
||||
.drawStringWithShadow("?", button.xPosition + button.getButtonWidth() - 7, button.yPosition + 1,
|
||||
0xE0E0E0);
|
||||
if (isMouseOver(button, mouseX, mouseY)) {
|
||||
flagOver = true;
|
||||
mc.fontRenderer.drawStringWithShadow("\247b?", button.xPosition + button.getButtonWidth() - 7,
|
||||
button.yPosition + 1, 16777215);
|
||||
mc.fontRenderer.setUnicodeFlag(flagUnicode);
|
||||
if (timeStart == 0) {
|
||||
timeStart = System.currentTimeMillis();
|
||||
} else if (System.currentTimeMillis() - timeStart > 1000) {
|
||||
drawHoveringText(Arrays.asList(tooltip.split("\\\\n")), mouseX, mouseY, mc.fontRenderer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!flagOver) {
|
||||
timeStart = 0;
|
||||
mc.fontRenderer.setUnicodeFlag(flagUnicode);
|
||||
}
|
||||
}
|
||||
|
||||
protected void drawActiveSlot() {
|
||||
if (activeSlot != -1) {
|
||||
Slot slot = inventorySlots.getSlot(activeSlot);
|
||||
int size = getSizeSlotActive(activeSlot);
|
||||
int move = (size - 16) / 2;
|
||||
drawRect(slot.xDisplayPosition - move, slot.yDisplayPosition - move, slot.xDisplayPosition + size - move,
|
||||
slot.yDisplayPosition + size - move, 0x60aeff00);
|
||||
}
|
||||
}
|
||||
|
||||
public void drawCenteredStringMultiLine(FontRenderer fontRendererIn,
|
||||
String text,
|
||||
int x1,
|
||||
int x2,
|
||||
int y1,
|
||||
int y2,
|
||||
int color) {
|
||||
String[] buffer = text.split("\\n");
|
||||
float x = (x1 + x2) / 2.0f;
|
||||
float y = (y1 + y2 - buffer.length * 10 + 2) / 2.0f - 10;
|
||||
for (String s : buffer) {
|
||||
fontRendererIn
|
||||
.drawStringWithShadow(s, (int) x - fontRendererIn.getStringWidth(s) / 2, (int) (y += 10), color);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isMouseOver(GuiButton button, int mouseX, int mouseY) {
|
||||
return mouseX >= button.xPosition + button.getButtonWidth() - 10 &&
|
||||
mouseX <= button.xPosition + button.getButtonWidth() && mouseY >= button.yPosition &&
|
||||
mouseY <= button.yPosition + 10;
|
||||
}
|
||||
|
||||
protected void drawCenteredStringWithoutShadow(FontRenderer fontRendererIn, String text, int x, int y, int color) {
|
||||
fontRendererIn.drawString(text, x - fontRendererIn.getStringWidth(text) / 2, y, color);
|
||||
}
|
||||
|
||||
protected abstract String getButtonTooltip(int buttonId);
|
||||
|
||||
protected abstract int getSizeSlotActive(int index);
|
||||
|
||||
protected Slot getSlotUnderMouse() {
|
||||
Slot theSlot = null;
|
||||
try {
|
||||
Field field = JecaGuiContainer.class.getSuperclass().getDeclaredField("theSlot");
|
||||
field.setAccessible(true);
|
||||
theSlot = (Slot) field.get(this);
|
||||
field.setAccessible(false);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return theSlot;
|
||||
}
|
||||
}
|
||||
@@ -1,116 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.commom;
|
||||
|
||||
import codechicken.nei.guihook.GuiContainerManager;
|
||||
import me.towdium.jecalculation.core.ItemStackWrapper;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.renderer.entity.RenderItem;
|
||||
import net.minecraft.client.renderer.texture.TextureManager;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public abstract class GuiJustEnoughCalculation extends GuiContainer {
|
||||
protected GuiScreen parent;
|
||||
protected RenderItem renderItem = new RenderItem() {
|
||||
@Override
|
||||
public void renderItemOverlayIntoGUI(FontRenderer p_77021_1_,
|
||||
TextureManager p_77021_2_,
|
||||
ItemStack p_77021_3_,
|
||||
int p_77021_4_,
|
||||
int p_77021_5_,
|
||||
String text) {
|
||||
if (p_77021_3_ != null && p_77021_3_.hasTagCompound() &&
|
||||
p_77021_3_.getTagCompound().getBoolean("jecalculation")) {
|
||||
boolean b = p_77021_1_.getUnicodeFlag();
|
||||
p_77021_1_.setUnicodeFlag(true);
|
||||
super.renderItemOverlayIntoGUI(p_77021_1_, p_77021_2_, p_77021_3_, p_77021_4_, p_77021_5_,
|
||||
ItemStackWrapper.getDisplayAmount(p_77021_3_));
|
||||
p_77021_1_.setUnicodeFlag(b);
|
||||
} else {
|
||||
super.renderItemOverlayIntoGUI(p_77021_1_, p_77021_2_, p_77021_3_, p_77021_4_, p_77021_5_, text);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
public GuiJustEnoughCalculation(@Nonnull Container inventorySlotsIn, @Nullable GuiScreen parent) {
|
||||
super(inventorySlotsIn);
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleMouseClick(Slot slotIn, int slotId, int clickedButton, int clickType) {
|
||||
if (slotIn != null) {
|
||||
slotId = slotIn.slotNumber;
|
||||
}
|
||||
mc.thePlayer.openContainer.slotClick(slotId, clickedButton, clickType, mc.thePlayer);
|
||||
}
|
||||
|
||||
public void click(int mouseX, int mouseY, int mouseButton) {
|
||||
this.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
}
|
||||
|
||||
public void click(int index) {
|
||||
for (Object button : buttonList) {
|
||||
if (((GuiButton) button).id == index) {
|
||||
actionPerformed(((GuiButton) button));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void drawCenteredStringWithoutShadow(FontRenderer fontRendererIn, String text, int x, int y, int color) {
|
||||
fontRendererIn.drawString(text, x - fontRendererIn.getStringWidth(text) / 2, y, color);
|
||||
}
|
||||
|
||||
public void updateLayout() {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void keyTyped(char typedChar, int keyCode) {
|
||||
if (keyCode == 1) {
|
||||
mc.displayGuiScreen(parent);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int p_73863_1_, int p_73863_2_, float p_73863_3_) {
|
||||
RenderItem buffer1 = itemRender;
|
||||
RenderItem buffer2 = GuiContainerManager.drawItems;
|
||||
itemRender = renderItem;
|
||||
GuiContainerManager.drawItems = renderItem;
|
||||
super.drawScreen(p_73863_1_, p_73863_2_, p_73863_3_);
|
||||
itemRender = buffer1;
|
||||
GuiContainerManager.drawItems = buffer2;
|
||||
}
|
||||
|
||||
protected Slot getSlotUnderMouse(int x, int y) {
|
||||
Method getSlot = null;
|
||||
try {
|
||||
getSlot = GuiContainer.class.getDeclaredMethod("getSlotAtPosition", int.class, int.class);
|
||||
} catch (NoSuchMethodException ignored) {
|
||||
try {
|
||||
getSlot = GuiContainer.class.getDeclaredMethod("func_146975_c", int.class, int.class);
|
||||
} catch (NoSuchMethodException ignored_) {
|
||||
}
|
||||
}
|
||||
try {
|
||||
getSlot.setAccessible(true);
|
||||
return (Slot) getSlot.invoke(this, x, y);
|
||||
} catch (IllegalAccessException | InvocationTargetException | NullPointerException e) {
|
||||
return null;
|
||||
}
|
||||
//getSlotAtPosition(int p_146975_1_, int p_146975_2_)
|
||||
}
|
||||
}
|
||||
@@ -1,337 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.commom;
|
||||
|
||||
import codechicken.nei.VisiblityData;
|
||||
import codechicken.nei.api.INEIGuiHandler;
|
||||
import codechicken.nei.api.TaggedInventoryArea;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* CODE IS DONE BY Zyin055
|
||||
* A GuiScreen replacement that supports putting tooltips onto GuiButtons.
|
||||
* SEE HERE: www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/modification-development/1437428-guide-1-7-2-how-to-make-button-tooltips
|
||||
*/
|
||||
public abstract class GuiTooltipScreen extends GuiJustEnoughCalculation implements INEIGuiHandler {
|
||||
int mousedOverButtonId = -1;
|
||||
|
||||
/**
|
||||
* Show a white "?" in the top right part of any button with a tooltip assigned to it
|
||||
*/
|
||||
public static boolean ShowTooltipButtonEffect = true;
|
||||
|
||||
/**
|
||||
* Show an aqua "?" in the top right part of any button with a tooltip assigned to it when mouseovered
|
||||
*/
|
||||
public static boolean ShowTooltipButtonMouseoverEffect = true;
|
||||
|
||||
/**
|
||||
* Putting this string into a tooltip will cause a line break
|
||||
*/
|
||||
public String tooltipNewlineDelimeter = "_p";
|
||||
|
||||
/**
|
||||
* The amount of time in milliseconds until a tooltip is rendered
|
||||
*/
|
||||
public long tooltipDelay = 900;
|
||||
|
||||
/**
|
||||
* The maximum width in pixels a tooltip can occupy before word wrapping occurs
|
||||
*/
|
||||
public int tooltipMaxWidth = 150;
|
||||
|
||||
protected int tooltipXOffset = 0;
|
||||
protected int tooltipYOffset = 10;
|
||||
|
||||
private final static int LINE_HEIGHT = 11;
|
||||
|
||||
private long mouseoverTime = 0;
|
||||
private long prevSystemTime = -1;
|
||||
|
||||
public GuiTooltipScreen(@Nonnull Container inventorySlotsIn, @Nullable GuiScreen parent) {
|
||||
super(inventorySlotsIn, parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int p_146979_1_, int p_146979_2_) {
|
||||
super.drawGuiContainerForegroundLayer(p_146979_1_, p_146979_2_);
|
||||
if (ShowTooltipButtonEffect)
|
||||
RenderTooltipButtonEffect();
|
||||
if (ShowTooltipButtonMouseoverEffect && GetButtonTooltip(mousedOverButtonId) != null)
|
||||
for (Object button : buttonList) {
|
||||
if (((GuiButton) button).id == mousedOverButtonId) {
|
||||
RenderTooltipButtonMouseoverEffect(((GuiButton) button));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void drawScreen(int mouseX, int mouseY, float f) {
|
||||
for (Object button : buttonList) {
|
||||
if (IsButtonMouseovered(mouseX, mouseY, ((GuiButton) button))) {
|
||||
mousedOverButtonId = ((GuiButton) button).id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
super.drawScreen(mouseX, mouseY, f);
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
DrawTooltipScreen(mouseX, mouseY);
|
||||
/*InventoryPlayer inventoryplayer = this.mc.thePlayer.inventory;
|
||||
Field field;
|
||||
Slot theSlot = null;
|
||||
try {
|
||||
field = GuiContainer.class.getDeclaredField("theSlot");
|
||||
field.setAccessible(true);
|
||||
theSlot = (Slot) field.get(this);
|
||||
} catch (Exception ignored) {}
|
||||
try {
|
||||
field = GuiContainer.class.getDeclaredField("field_147006_u");
|
||||
field.setAccessible(true);
|
||||
theSlot = (Slot) field.get(this);
|
||||
} catch (Exception ignored) {}
|
||||
if (inventoryplayer.getItemStack() == null && theSlot != null && theSlot.getHasStack())
|
||||
{
|
||||
ItemStack itemstack1 = theSlot.getStack();
|
||||
//GuiContainerManager.itemDisplayNameMultiline(itemstack1, this, true);
|
||||
drawHoveringText(GuiContainerManager.itemDisplayNameMultiline(itemstack1, this, true), mouseX, mouseY, fontRendererObj);
|
||||
}
|
||||
RenderHelper.enableStandardItemLighting();*/
|
||||
mousedOverButtonId = -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This method must be overriden. Gets a tooltip String for a specific button.
|
||||
* Recommended to use a switch/case statement for buttonId for easy implementation.
|
||||
*
|
||||
* @param buttonId The ID of the button this tooltip corresponds to
|
||||
* @return The tooltip string for the specified buttonId. null if no tooltip exists for this button.
|
||||
*/
|
||||
protected abstract String GetButtonTooltip(int buttonId);
|
||||
|
||||
/**
|
||||
* Renders any special effects applied to tooltip buttons, and renders any tooltips for GuiButtons
|
||||
* that are being mouseovered.
|
||||
*/
|
||||
protected void DrawTooltipScreen(int mouseX, int mouseY) {
|
||||
|
||||
|
||||
//find out which button is being mouseovered
|
||||
|
||||
|
||||
//calculate how long this button has been mouseovered for
|
||||
if (mousedOverButtonId > -1) {
|
||||
long systemTime = System.currentTimeMillis();
|
||||
|
||||
if (prevSystemTime > 0)
|
||||
mouseoverTime += systemTime - prevSystemTime;
|
||||
|
||||
prevSystemTime = systemTime;
|
||||
} else {
|
||||
mouseoverTime = 0;
|
||||
}
|
||||
|
||||
//render the button's tooltip
|
||||
if (mouseoverTime > tooltipDelay) {
|
||||
String tooltip = GetButtonTooltip(mousedOverButtonId);
|
||||
if (tooltip != null) {
|
||||
RenderTooltip(mouseX, mouseY, tooltip);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if a GuiButton is being mouseovered.
|
||||
*
|
||||
* @return true if this button is mouseovered
|
||||
*/
|
||||
private boolean IsButtonMouseovered(int mouseX, int mouseY, GuiButton button) {
|
||||
return mouseX >= button.xPosition + button.getButtonWidth() - 10 &&
|
||||
mouseX <= button.xPosition + button.getButtonWidth() && mouseY >= button.yPosition &&
|
||||
mouseY <= button.yPosition + 10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render anything special onto all buttons that have tooltips assigned to them.
|
||||
*/
|
||||
private void RenderTooltipButtonEffect() {
|
||||
for (Object buttonObj : buttonList) {
|
||||
GuiButton button = ((GuiButton) buttonObj);
|
||||
if (GetButtonTooltip(button.id) != null) {
|
||||
|
||||
boolean flag = fontRendererObj.getUnicodeFlag();
|
||||
fontRendererObj.setUnicodeFlag(true);
|
||||
fontRendererObj.drawStringWithShadow("?", button.xPosition + button.getButtonWidth() - 7 - guiLeft,
|
||||
button.yPosition + 1 - guiTop, 14737632);
|
||||
fontRendererObj.setUnicodeFlag(flag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Render anything special onto buttons that have tooltips assigned to them when they are mousevered.
|
||||
*/
|
||||
private void RenderTooltipButtonMouseoverEffect(GuiButton button) {
|
||||
boolean flag = fontRendererObj.getUnicodeFlag();
|
||||
fontRendererObj.setUnicodeFlag(true);
|
||||
fontRendererObj
|
||||
.drawStringWithShadow(FontCodes.AQUA + "?", button.xPosition + button.getButtonWidth() - 7 - guiLeft,
|
||||
button.yPosition + 1 - guiTop, 14737632);
|
||||
fontRendererObj.setUnicodeFlag(flag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a tooltip at (x,y).
|
||||
*/
|
||||
private void RenderTooltip(int x, int y, String tooltip) {
|
||||
String[] tooltipArray = ParseTooltipArrayFromString(tooltip);
|
||||
this.drawHoveringText(ImmutableList.copyOf(tooltipArray), x, y, fontRendererObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a String representation of a tooltip into a String[], and also decodes any font codes used.
|
||||
*
|
||||
* @param s Ex: "Hello,_nI am your _ltooltip_r and you love me."
|
||||
* @return An array of Strings such that each String width does not exceed tooltipMaxWidth
|
||||
*/
|
||||
private String[] ParseTooltipArrayFromString(String s) {
|
||||
s = DecodeStringCodes(s);
|
||||
String[] tooltipSections = s.split(tooltipNewlineDelimeter);
|
||||
ArrayList<String> tooltipArrayList = new ArrayList();
|
||||
|
||||
for (String section : tooltipSections) {
|
||||
String tooltip = "";
|
||||
String[] tooltipWords = section.split(" ");
|
||||
|
||||
for (String tooltipWord : tooltipWords) {
|
||||
int lineWidthWithNextWord = mc.fontRenderer.getStringWidth(tooltip + tooltipWord);
|
||||
if (lineWidthWithNextWord > tooltipMaxWidth) {
|
||||
tooltipArrayList.add(tooltip.trim());
|
||||
tooltip = tooltipWord + " ";
|
||||
} else {
|
||||
tooltip += tooltipWord + " ";
|
||||
}
|
||||
}
|
||||
|
||||
tooltipArrayList.add(tooltip.trim());
|
||||
}
|
||||
|
||||
String[] tooltipArray = new String[tooltipArrayList.size()];
|
||||
tooltipArrayList.toArray(tooltipArray);
|
||||
|
||||
return tooltipArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decodes any font codes into something useable by the fontRendererObj.
|
||||
*
|
||||
* @param s E.x.: "Hello,_nI am your _ltooltip_r and you love me."
|
||||
* @return E.x. output (html not included): <br>"Hello,<br>I am your <b>tooltip</b> and you love me."
|
||||
*/
|
||||
private String DecodeStringCodes(String s) {
|
||||
return s.replace("_0", FontCodes.BLACK).replace("_1", FontCodes.DARK_BLUE).replace("_2", FontCodes.DARK_GREEN)
|
||||
.replace("_3", FontCodes.DARK_AQUA).replace("_4", FontCodes.DARK_RED)
|
||||
.replace("_5", FontCodes.DARK_PURPLE).replace("_6", FontCodes.GOLD).replace("_7", FontCodes.GRAY)
|
||||
.replace("_8", FontCodes.DARK_GREY).replace("_9", FontCodes.BLUE).replace("_a", FontCodes.GREEN)
|
||||
.replace("_b", FontCodes.AQUA).replace("_c", FontCodes.RED).replace("_d", FontCodes.LIGHT_PURPLE)
|
||||
.replace("_e", FontCodes.YELLOW).replace("_f", FontCodes.WHITE).replace("_k", FontCodes.OBFUSCATED)
|
||||
.replace("_l", FontCodes.BOLD).replace("_m", FontCodes.STRIKETHROUGH).replace("_n", FontCodes.UNDERLINE)
|
||||
.replace("_o", FontCodes.ITALICS).replace("_r", FontCodes.RESET);
|
||||
}
|
||||
|
||||
/***
|
||||
* Gets the width of the tooltip in pixels.
|
||||
*/
|
||||
private int GetTooltipWidth(String[] tooltipArray) {
|
||||
int longestWidth = 0;
|
||||
for (String s : tooltipArray) {
|
||||
int width = mc.fontRenderer.getStringWidth(s);
|
||||
if (width > longestWidth)
|
||||
longestWidth = width;
|
||||
}
|
||||
return longestWidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the height of the tooltip in pixels.
|
||||
*/
|
||||
private int GetTooltipHeight(String[] tooltipArray) {
|
||||
int tooltipHeight = mc.fontRenderer.FONT_HEIGHT - 2;
|
||||
if (tooltipArray.length > 1) {
|
||||
tooltipHeight += (tooltipArray.length - 1) * LINE_HEIGHT;
|
||||
}
|
||||
return tooltipHeight;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VisiblityData modifyVisiblity(GuiContainer guiContainer, VisiblityData visiblityData) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Integer> getItemSpawnSlots(GuiContainer guiContainer, ItemStack itemStack) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaggedInventoryArea> getInventoryAreas(GuiContainer guiContainer) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleDragNDrop(GuiContainer guiContainer, int i, int i1, ItemStack itemStack, int i2) {
|
||||
itemStack.stackSize = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hideItemPanelSlot(GuiContainer guiContainer, int i, int i1, int i2, int i3) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public class FontCodes {
|
||||
//color codes for rendered strings
|
||||
public static final String BLACK = "\2470";
|
||||
public static final String DARK_BLUE = "\2471";
|
||||
public static final String DARK_GREEN = "\2472";
|
||||
public static final String DARK_AQUA = "\2473";
|
||||
public static final String DARK_RED = "\2474";
|
||||
public static final String DARK_PURPLE = "\2475";
|
||||
public static final String GOLD = "\2476";
|
||||
public static final String GRAY = "\2477";
|
||||
public static final String DARK_GREY = "\2478";
|
||||
public static final String BLUE = "\2479";
|
||||
public static final String GREEN = "\247a";
|
||||
public static final String AQUA = "\247b";
|
||||
public static final String RED = "\247c";
|
||||
public static final String LIGHT_PURPLE = "\247d";
|
||||
public static final String YELLOW = "\247e";
|
||||
public static final String WHITE = "\247f";
|
||||
|
||||
//font styles
|
||||
public static final String OBFUSCATED = "\247k";
|
||||
public static final String BOLD = "\247l";
|
||||
public static final String STRIKETHROUGH = "\247m";
|
||||
public static final String UNDERLINE = "\247n";
|
||||
public static final String ITALICS = "\247o";
|
||||
|
||||
public static final String RESET = "\247r";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,117 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.commom.recipe;
|
||||
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.core.ItemStackWrapper;
|
||||
import me.towdium.jecalculation.core.Recipe;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class ContainerRecipe extends Container {
|
||||
|
||||
public ContainerRecipe() {
|
||||
InventoryRecipe inventoryRecipe = new InventoryRecipe();
|
||||
int i, left, top;
|
||||
i = 0;
|
||||
left = 9;
|
||||
top = 9;
|
||||
for (int a = 0; a < 2; a++) {
|
||||
for (int b = 0; b < 2; b++) {
|
||||
addSlotToContainer(new Slot(inventoryRecipe, i + 2 * a + b, left + b * 59, top + a * 24));
|
||||
}
|
||||
}
|
||||
i = 4;
|
||||
left = 9;
|
||||
top = 69;
|
||||
for (int a = 0; a < 4; a++) {
|
||||
for (int b = 0; b < 3; b++) {
|
||||
addSlotToContainer(new Slot(inventoryRecipe, i + 3 * a + b, left + b * 59, top + a * 24));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Slot getSlot(int p_75139_1_) {
|
||||
if (p_75139_1_ <= 15)
|
||||
return super.getSlot(p_75139_1_);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStackInSlot(int p_75141_1_, ItemStack p_75141_2_) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack slotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn) {
|
||||
if (slotId < 0 || slotId >= 16) {
|
||||
return null;
|
||||
}
|
||||
Slot slot = getSlot(slotId);
|
||||
if (slot != null) {
|
||||
ItemStack itemStack = slot.inventory.getStackInSlot(slot.getSlotIndex());
|
||||
if (itemStack != null) {
|
||||
if (clickedButton == 0 && mode == 0) {
|
||||
ItemStackWrapper.Click.leftClick(slot.getStack(), true);
|
||||
} else if (clickedButton == 0 && mode == 1) {
|
||||
ItemStackWrapper.Click.leftShift(slot.getStack(), true);
|
||||
} else if (clickedButton == 1 && mode == 0) {
|
||||
ItemStackWrapper.Click.rightClick(slot.getStack(), true);
|
||||
} else if (clickedButton == 1 && mode == 1) {
|
||||
ItemStackWrapper.Click.rightShift(slot.getStack(), true);
|
||||
}
|
||||
slot.putStack(itemStack.stackSize == 0 ? null : itemStack);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer playerIn) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Recipe buildRecipe() {
|
||||
ItemStack[] output = new ItemStack[4];
|
||||
boolean flag1 = false, flag2 = false;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
ItemStack buffer = getSlot(i).getStack();
|
||||
if (buffer != null && buffer.hasTagCompound()) {
|
||||
buffer.getTagCompound().removeTag(JustEnoughCalculation.Reference.MODID);
|
||||
if (buffer.getTagCompound().hasNoTags()) {
|
||||
buffer.setTagCompound(null);
|
||||
}
|
||||
}
|
||||
output[i] = buffer;
|
||||
if (output[i] != null) {
|
||||
flag1 = true;
|
||||
}
|
||||
}
|
||||
ItemStack[] input = new ItemStack[12];
|
||||
for (int i = 4; i < 16; i++) {
|
||||
ItemStack buffer = getSlot(i).getStack();
|
||||
if (buffer != null && buffer.hasTagCompound()) {
|
||||
buffer.getTagCompound().removeTag(JustEnoughCalculation.Reference.MODID);
|
||||
if (buffer.getTagCompound().hasNoTags()) {
|
||||
buffer.setTagCompound(null);
|
||||
}
|
||||
}
|
||||
input[i - 4] = buffer;
|
||||
if (input[i - 4] != null) {
|
||||
flag2 = true;
|
||||
}
|
||||
}
|
||||
return flag1 && flag2 ? new Recipe(output, input) : null;
|
||||
}
|
||||
}
|
||||
@@ -1,181 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.commom.recipe;
|
||||
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.core.ItemStackWrapper;
|
||||
import me.towdium.jecalculation.core.Recipe;
|
||||
import me.towdium.jecalculation.gui.commom.GuiTooltipScreen;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.StatCollector;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class GuiRecipe extends GuiTooltipScreen {
|
||||
private int activeSlot = -1;
|
||||
|
||||
public GuiRecipe(@Nonnull Container inventorySlotsIn, @Nullable GuiScreen parent) {
|
||||
super(inventorySlotsIn, parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
int i, left, top;
|
||||
i = 0;
|
||||
left = 31 + guiLeft;
|
||||
top = 7 + guiTop;
|
||||
for (int a = 0; a < 2; a++) {
|
||||
for (int b = 0; b < 2; b++) {
|
||||
buttonList.add(new GuiButton(i + 2 * a + b, left + b * 59, top + a * 24, 20, 20, "#"));
|
||||
}
|
||||
}
|
||||
i = 4;
|
||||
left = 31 + guiLeft;
|
||||
top = 67 + guiTop;
|
||||
for (int a = 0; a < 4; a++) {
|
||||
for (int b = 0; b < 3; b++) {
|
||||
buttonList.add(new GuiButton(i + 3 * a + b, left + b * 59, top + a * 24, 20, 20, "#"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
|
||||
this.mc.getTextureManager()
|
||||
.bindTexture(new ResourceLocation(JustEnoughCalculation.Reference.MODID, "textures/gui/guiRecipe.png"));
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
|
||||
if (activeSlot != -1) {
|
||||
Slot slot = inventorySlots.getSlot(activeSlot);
|
||||
this.drawTexturedModalRect(this.guiLeft + slot.xDisplayPosition - 2,
|
||||
this.guiTop + slot.yDisplayPosition - 2, 176, 0, 20, 20);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) {
|
||||
int buttonId = button.id;
|
||||
if (buttonId <= 15) {
|
||||
Slot slot = inventorySlots.getSlot(buttonId);
|
||||
if (button.displayString.equals("#")) {
|
||||
slot.putStack(ItemStackWrapper.toPercentage(slot.getStack()));
|
||||
button.displayString = "%";
|
||||
} else {
|
||||
slot.putStack(ItemStackWrapper.toNormal(slot.getStack()));
|
||||
button.displayString = "#";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*@Override
|
||||
protected void mouseClicked(int mouseX, int mouseY, int mouseButton){
|
||||
super.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
Slot slot = null;
|
||||
try {
|
||||
Field slotField = this.getClass().getDeclaredField("field_146998_K");
|
||||
slotField.setAccessible(true);
|
||||
slot = (Slot) slotField.get(this);
|
||||
}
|
||||
catch (NoSuchFieldException ignored) {}
|
||||
catch (IllegalAccessException ignored) {}
|
||||
|
||||
if(slot != null && mouseButton == 0 && slot.getStack() == null){
|
||||
setActiveSlot(slot.getSlotIndex());
|
||||
mc.thePlayer.playSound("random.click", 1f, 1f );
|
||||
}
|
||||
}*/
|
||||
|
||||
@Override
|
||||
protected void keyTyped(char typedChar, int keyCode) {
|
||||
if (keyCode == 1) {
|
||||
if (activeSlot != -1) {
|
||||
setActiveSlot(-1);
|
||||
} else {
|
||||
super.keyTyped(typedChar, keyCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleMouseClick(Slot slotIn, int slotId, int clickedButton, int clickType) {
|
||||
boolean b = false;
|
||||
if (slotIn != null) {
|
||||
b = slotIn.getHasStack();
|
||||
}
|
||||
super.handleMouseClick(slotIn, slotId, clickedButton, clickType);
|
||||
if (slotIn != null && b && !slotIn.getHasStack()) {
|
||||
((GuiButton) buttonList.get(slotIn.getSlotIndex())).displayString = "#";
|
||||
}
|
||||
}
|
||||
|
||||
public int getActiveSlot() {
|
||||
return activeSlot;
|
||||
}
|
||||
|
||||
public void setActiveSlot(int activeSlot) {
|
||||
this.activeSlot = activeSlot;
|
||||
}
|
||||
|
||||
public void displayRecipe(Recipe recipe) {
|
||||
List<ItemStack> output = recipe.getOutput();
|
||||
List<ItemStack> input = recipe.getInput();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (i < output.size()) {
|
||||
ItemStack itemStack = output.get(i);
|
||||
this.inventorySlots.getSlot(i).putStack(itemStack);
|
||||
ItemStackWrapper.NBT.setBool(itemStack, JustEnoughCalculation.Reference.MODID, true);
|
||||
if (itemStack.getTagCompound().hasKey("percentage")) {
|
||||
((GuiButton) buttonList.get(i)).displayString = "%";
|
||||
}
|
||||
} else {
|
||||
this.inventorySlots.getSlot(i).putStack(null);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 12; i++) {
|
||||
if (i < input.size()) {
|
||||
ItemStack itemStack = input.get(i);
|
||||
this.inventorySlots.getSlot(i + 4).putStack(itemStack);
|
||||
ItemStackWrapper.NBT.setBool(itemStack, JustEnoughCalculation.Reference.MODID, true);
|
||||
if (itemStack.getTagCompound().hasKey("percentage")) {
|
||||
((GuiButton) buttonList.get(i + 4)).displayString = "%";
|
||||
}
|
||||
} else {
|
||||
this.inventorySlots.getSlot(i + 4).putStack(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String GetButtonTooltip(int buttonId) {
|
||||
if (buttonId == 0) {
|
||||
return StatCollector.translateToLocal("gui.calculator.tooltipUse");
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleDragNDrop(GuiContainer guiContainer, int i, int i1, ItemStack itemStack, int i2) {
|
||||
//JustEnoughCalculation.log.info(itemStack.toString());
|
||||
ItemStack buffer = itemStack.copy();
|
||||
ItemStackWrapper.NBT.setBool(buffer, "jecalculation", true);
|
||||
buffer.stackSize = 1;
|
||||
Slot slot = getSlotUnderMouse(i, i1);
|
||||
if (slot != null) {
|
||||
slot.putStack(buffer);
|
||||
itemStack.stackSize = 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.commom.recipe;
|
||||
|
||||
import net.minecraft.inventory.InventoryBasic;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class InventoryRecipe extends InventoryBasic {
|
||||
public InventoryRecipe() {
|
||||
super("Recipe", false, 16);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
package me.towdium.jecalculation.gui.guis;
|
||||
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.gui.JecaContainer;
|
||||
import me.towdium.jecalculation.gui.JecaGuiContainer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class GuiCalculator extends JecaGuiContainer {
|
||||
GuiTextField textFieldAmount;
|
||||
|
||||
GuiButton buttonSearch;
|
||||
GuiButton buttonAdd;
|
||||
GuiButton buttonView;
|
||||
GuiButton buttonSettings;
|
||||
GuiButton buttonLeft;
|
||||
GuiButton buttonRight;
|
||||
GuiButton buttonMode;
|
||||
GuiButton buttonStock;
|
||||
|
||||
int activeSlot = -1;
|
||||
int page = 1;
|
||||
int total = 0;
|
||||
|
||||
@SuppressWarnings("DuplicateBranchesInSwitch")
|
||||
public enum EnumMode {
|
||||
INPUT, PROCEDURE, OUTPUT, CATALYST;
|
||||
|
||||
int toInt() {
|
||||
switch (this) {
|
||||
case INPUT:
|
||||
return 1;
|
||||
case PROCEDURE:
|
||||
return 2;
|
||||
case OUTPUT:
|
||||
return 3;
|
||||
case CATALYST:
|
||||
return 4;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static EnumMode fromInt(int i) {
|
||||
switch (i) {
|
||||
case 1:
|
||||
return INPUT;
|
||||
case 2:
|
||||
return PROCEDURE;
|
||||
case 3:
|
||||
return OUTPUT;
|
||||
case 4:
|
||||
return CATALYST;
|
||||
default:
|
||||
return INPUT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public GuiCalculator(GuiScreen parent) {
|
||||
super(new ContainerCalculator(), parent);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
buttonSearch = new GuiButton(1, guiLeft + 119, guiTop + 7, 50, 20, "search");
|
||||
buttonAdd = new GuiButton(2, guiLeft + 7, guiTop + 53, 52, 20, "Add");
|
||||
buttonView = new GuiButton(3, guiLeft + 63, guiTop + 53, 52, 20, "Records");
|
||||
buttonSettings = new GuiButton(4, guiLeft + 119, guiTop + 53, 50, 20, "Settings");
|
||||
buttonLeft = new GuiButton(5, guiLeft + 7, guiTop + 139, 14, 20, "<");
|
||||
buttonRight = new GuiButton(6, guiLeft + 45, guiTop + 139, 14, 20, ">");
|
||||
buttonMode = new GuiButton(7, guiLeft + 63, guiTop + 139, 52, 20, "Catalyst");
|
||||
buttonStock = new GuiButton(8, guiLeft + 119, guiTop + 139, 50, 20, "Stock");
|
||||
buttonList.add(buttonSearch);
|
||||
buttonList.add(buttonAdd);
|
||||
buttonList.add(buttonView);
|
||||
buttonList.add(buttonSettings);
|
||||
buttonList.add(buttonLeft);
|
||||
buttonList.add(buttonRight);
|
||||
buttonList.add(buttonMode);
|
||||
buttonList.add(buttonStock);
|
||||
textFieldAmount = new GuiTextField(fontRendererObj, guiLeft + 39, guiTop + 8, 75, 18);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) {
|
||||
//noinspection SwitchStatementWithTooFewBranches
|
||||
switch (button.id) {
|
||||
case 1: mc.displayGuiScreen(new GuiRecipeSearch(this));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
|
||||
this.mc.getTextureManager().bindTexture(
|
||||
new ResourceLocation(JustEnoughCalculation.Reference.MODID, "textures/gui/guiCalculator.png"));
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
|
||||
textFieldAmount.drawTextBox();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY);
|
||||
fontRendererObj.drawString("x", 30, 13, 0x404040);
|
||||
drawCenteredStringWithoutShadow(fontRendererObj, "Recent", 144, 36, 0x404040);
|
||||
drawCenteredString(fontRendererObj, page + "/" + total, 33, 145, 0xFFFFFF);
|
||||
}
|
||||
|
||||
@SuppressWarnings("SwitchStatementWithTooFewBranches")
|
||||
@Override
|
||||
protected String getButtonTooltip(int buttonId) {
|
||||
switch (buttonId) {
|
||||
case 4:
|
||||
return "Hello\\nShit";
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getSizeSlotActive(int index) {
|
||||
return index == 0 ? 20: 0;
|
||||
}
|
||||
|
||||
public static class ContainerCalculator extends JecaContainer {
|
||||
@Override
|
||||
protected void addSlots() {
|
||||
addSlotSingle(9, 9);
|
||||
addSlotGroup(8, 32, 18, 18, 1, 6);
|
||||
addSlotGroup(8, 82, 18, 18, 3, 9);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ItemStack slotClick(int slotId,
|
||||
int dragType,
|
||||
int clickTypeIn,
|
||||
EntityPlayer player) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
package me.towdium.jecalculation.gui.guis;
|
||||
|
||||
import cpw.mods.fml.client.config.GuiButtonExt;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.JecaTranslator;
|
||||
import me.towdium.jecalculation.gui.JecaContainer;
|
||||
import me.towdium.jecalculation.gui.JecaGuiContainer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class GuiEditor extends JecaGuiContainer {
|
||||
ArrayList<GuiButton> buttonMode;
|
||||
GuiButton buttonLeft;
|
||||
GuiButton buttonRight;
|
||||
GuiButton buttonNew;
|
||||
GuiButton buttonHelp;
|
||||
GuiButton buttonSave;
|
||||
GuiButton buttonClear;
|
||||
|
||||
|
||||
public GuiEditor(GuiScreen parent) {
|
||||
super(new ContainerEditor(), parent);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
buttonMode = new ArrayList<>();
|
||||
int count = -1;
|
||||
for (int i = 0; i < 2; i++) {
|
||||
for (int j = 0; j < 4; j++) {
|
||||
buttonMode.add(new GuiButtonExt(++count, 44 + j * 21 + guiLeft, 51 + i * 33 + guiTop, 10, 10, "#"));
|
||||
buttonMode.add(new GuiButtonExt(++count, 54 + j * 21 + guiLeft, 51 + i * 33 + guiTop, 10, 10, "I"));
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 2; i++) {
|
||||
for (int j = 0; j < 6; j++) {
|
||||
buttonMode.add(new GuiButtonExt(++count, 44 + j * 21 + guiLeft, 117 + i * 32 + guiTop, 10, 10, "#"));
|
||||
buttonMode.add(new GuiButtonExt(++count, 54 + j * 21 + guiLeft, 117 + i * 32 + guiTop, 10, 10, "I"));
|
||||
}
|
||||
}
|
||||
buttonLeft = new GuiButtonExt(40, guiLeft + 7, guiTop + 7, 14, 20, "<");
|
||||
buttonRight = new GuiButtonExt(41, guiLeft + 90, guiTop + 7, 14, 20, ">");
|
||||
buttonNew = new GuiButtonExt(42, guiLeft + 108, guiTop + 7, 61, 20,
|
||||
JecaTranslator.format("gui.editor.newGroup"));
|
||||
buttonHelp = new GuiButtonExt(43, guiLeft + 131, guiTop + 75, 38, 18, JecaTranslator.format("gui.editor.help"));
|
||||
buttonSave = new GuiButtonExt(44, guiLeft + 131, guiTop + 31, 38, 18, JecaTranslator.format("gui.editor.save"));
|
||||
buttonClear = new GuiButtonExt(45, guiLeft + 131, guiTop + 53, 38, 18,
|
||||
JecaTranslator.format("gui.editor.clear"));
|
||||
buttonList.addAll(buttonMode);
|
||||
buttonList.add(buttonLeft);
|
||||
buttonList.add(buttonRight);
|
||||
buttonList.add(buttonNew);
|
||||
buttonList.add(buttonHelp);
|
||||
buttonList.add(buttonSave);
|
||||
buttonList.add(buttonClear);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||
super.drawGuiContainerForegroundLayer(mouseX, mouseY);
|
||||
drawCenteredStringMultiLine(fontRendererObj, JecaTranslator.format("gui.editor.output"), 7, 44, 31, 61,
|
||||
0xFFFFFF);
|
||||
drawCenteredStringMultiLine(fontRendererObj, JecaTranslator.format("gui.editor.catalyst"), 7, 44, 64, 94,
|
||||
0xFFFFFF);
|
||||
drawCenteredStringMultiLine(fontRendererObj, JecaTranslator.format("gui.editor.input"), 7, 44, 97, 159,
|
||||
0xFFFFFF);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected String getButtonTooltip(int buttonId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getSizeSlotActive(int index) {
|
||||
return 20;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
|
||||
this.mc.getTextureManager()
|
||||
.bindTexture(new ResourceLocation(JustEnoughCalculation.Reference.MODID, "textures/gui/guiEditor.png"));
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
|
||||
}
|
||||
|
||||
public static class ContainerEditor extends JecaContainer {
|
||||
@Override
|
||||
protected void addSlots() {
|
||||
addSlotGroup(46, 33, 21, 33, 1, 4);
|
||||
addSlotGroup(46, 66, 21, 33, 1, 4);
|
||||
addSlotGroup(46, 99, 21, 32, 2, 6);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package me.towdium.jecalculation.gui.guis;
|
||||
|
||||
import cpw.mods.fml.client.config.GuiButtonExt;
|
||||
import me.towdium.jecalculation.gui.JecaContainer;
|
||||
import me.towdium.jecalculation.gui.JecaGuiContainer;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.inventory.Container;
|
||||
|
||||
public abstract class GuiRecipeList extends JecaGuiContainer {
|
||||
|
||||
public GuiRecipeList(Container inventorySlotsIn, GuiScreen parent) {
|
||||
super(inventorySlotsIn, parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getSizeSlotActive(int index) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
for (int i = 0; i < 5; i++) {
|
||||
buttonList.add(new GuiButtonExt(2 * i, guiLeft + 83, guiTop + 32 + 21 * i, 41, 18, "edit"));
|
||||
buttonList.add(new GuiButtonExt(1 + 2 * i, guiLeft + 128, guiTop + 32 + 21 * i, 41, 18, "delete"));
|
||||
}
|
||||
buttonList.add(new GuiButtonExt(10, guiLeft + 7, guiTop + 139, 20, 20, "<"));
|
||||
buttonList.add(new GuiButtonExt(11, guiLeft + 149, guiTop + 139, 20, 20, ">"));
|
||||
}
|
||||
|
||||
protected static abstract class ContainerRecipeList extends JecaContainer {
|
||||
@Override
|
||||
protected void addSlots() {
|
||||
addSlotGroup(8, 33, 18, 21, 5, 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package me.towdium.jecalculation.gui.guis;
|
||||
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GuiRecipeSearch extends GuiRecipeList {
|
||||
GuiButton buttonMode;
|
||||
GuiButton buttonSearch;
|
||||
EnumMode mode = EnumMode.OUT;
|
||||
|
||||
enum EnumMode {
|
||||
IN, OUT, IO;
|
||||
|
||||
EnumMode next(){
|
||||
switch (this){
|
||||
case OUT: return IN;
|
||||
case IN: return IO;
|
||||
case IO: return OUT;
|
||||
default: return OUT;
|
||||
}
|
||||
}
|
||||
|
||||
EnumMode last(){
|
||||
switch (this){
|
||||
case OUT: return IO;
|
||||
case IN: return OUT;
|
||||
case IO: return IN;
|
||||
default: return OUT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public GuiRecipeSearch(GuiScreen parent) {
|
||||
super(new ContainerRecipeList() {
|
||||
@Override
|
||||
protected void addSlots() {
|
||||
super.addSlots();
|
||||
addSlotSingle(9, 9);
|
||||
}
|
||||
}, parent);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
buttonMode = new GuiButton(12, 31+guiLeft, 7+guiTop, 84, 20, "mode");
|
||||
buttonSearch = new GuiButton(13, 119+guiLeft, 7+guiTop, 50, 20, "search");
|
||||
buttonList.add(buttonMode);
|
||||
buttonList.add(buttonSearch);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getButtonTooltip(int buttonId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float v, int i, int i1) {
|
||||
this.mc.getTextureManager().bindTexture(new ResourceLocation(JustEnoughCalculation.Reference.MODID, "textures/gui/guiRecipeSearch.png"));
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getSizeSlotActive(int index) {
|
||||
return index == 20 ? 20 : 0;
|
||||
}
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.guis.calculator;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class ContainerCalculator extends Container {
|
||||
EntityPlayer player;
|
||||
InventoryCalculator inventoryCalculator;
|
||||
|
||||
public ContainerCalculator(EntityPlayer player, ItemStack itemCalculator) {
|
||||
this.player = player;
|
||||
this.inventoryCalculator = new InventoryCalculator(itemCalculator);
|
||||
addSlotToContainer(new Slot(inventoryCalculator, 0, 9, 9));
|
||||
int i, left, top;
|
||||
i = 1;
|
||||
left = 8;
|
||||
top = 80;
|
||||
for (int a = 0; a < 3; a++) {
|
||||
for (int b = 0; b < 9; b++) {
|
||||
addSlotToContainer(new Slot(inventoryCalculator, i + 9 * a + b, left + b * 18, top + a * 18));
|
||||
}
|
||||
}
|
||||
i = 28;
|
||||
left = 8;
|
||||
top = 32;
|
||||
for (int a = 0; a < 1; a++) {
|
||||
for (int b = 0; b < 6; b++) {
|
||||
addSlotToContainer(new Slot(inventoryCalculator, i + 9 * a + b, left + b * 18, top + a * 18));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Slot getSlot(int p_75139_1_) {
|
||||
if (p_75139_1_ <= 33)
|
||||
return super.getSlot(p_75139_1_);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStackInSlot(int p_75141_1_, ItemStack p_75141_2_) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer playerIn) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack slotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public EntityPlayer getPlayer() {
|
||||
return player;
|
||||
}
|
||||
}
|
||||
@@ -1,523 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.guis.calculator;
|
||||
|
||||
import codechicken.nei.recipe.GuiCraftingRecipe;
|
||||
import codechicken.nei.recipe.ICraftingHandler;
|
||||
import codechicken.nei.recipe.TemplateRecipeHandler;
|
||||
import me.towdium.jecalculation.JecaConfig;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.core.Calculator;
|
||||
import me.towdium.jecalculation.core.CostRecord;
|
||||
import me.towdium.jecalculation.core.ItemStackWrapper;
|
||||
import me.towdium.jecalculation.gui.commom.GuiTooltipScreen;
|
||||
import me.towdium.jecalculation.gui.commom.recipe.ContainerRecipe;
|
||||
import me.towdium.jecalculation.gui.guis.recipeEditor.ContainerRecipeEditor;
|
||||
import me.towdium.jecalculation.gui.guis.recipeEditor.GuiRecipeEditor;
|
||||
import me.towdium.jecalculation.gui.guis.recipePicker.GuiRecipePicker;
|
||||
import me.towdium.jecalculation.gui.guis.recipeViewer.ContainerRecipeViewer;
|
||||
import me.towdium.jecalculation.gui.guis.recipeViewer.GuiRecipeViewer;
|
||||
import me.towdium.jecalculation.network.packets.PacketSyncRecord;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.StatCollector;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class GuiCalculator extends GuiTooltipScreen {
|
||||
static int recentLen = 6;
|
||||
GuiTextField textFieldAmount;
|
||||
GuiButton buttonLeft;
|
||||
GuiButton buttonRight;
|
||||
GuiButton buttonEdit;
|
||||
GuiButton buttonMode;
|
||||
//GuiButton buttonCalculate;
|
||||
GuiButton buttonView;
|
||||
CostRecord costRecord;
|
||||
Map<Integer, Integer> items;
|
||||
int activeSlot = -1;
|
||||
int page = 1;
|
||||
int total = 0;
|
||||
EnumMode mode = EnumMode.INPUT;
|
||||
ItemStack buffer;
|
||||
boolean init = false;
|
||||
|
||||
public enum EnumMode {
|
||||
INPUT, PROCEDURE, OUTPUT, CATALYST;
|
||||
|
||||
int toInt() {
|
||||
switch (this) {
|
||||
case INPUT:
|
||||
return 1;
|
||||
case PROCEDURE:
|
||||
return 2;
|
||||
case OUTPUT:
|
||||
return 3;
|
||||
case CATALYST:
|
||||
return 4;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static EnumMode fromInt(int i) {
|
||||
switch (i) {
|
||||
case 1:
|
||||
return INPUT;
|
||||
case 2:
|
||||
return PROCEDURE;
|
||||
case 3:
|
||||
return OUTPUT;
|
||||
case 4:
|
||||
return CATALYST;
|
||||
default:
|
||||
return INPUT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public GuiCalculator(ContainerCalculator containerCalculator) {
|
||||
super(containerCalculator, null);
|
||||
JustEnoughCalculation.network.sendToServer(new PacketSyncRecord());
|
||||
items = new HashMap<>(27);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
buttonLeft = new GuiButton(4, guiLeft + 7, guiTop + 139, 20, 20, "<");
|
||||
buttonRight = new GuiButton(5, guiLeft + 65, guiTop + 139, 20, 20, ">");
|
||||
buttonEdit = new GuiButton(3, guiLeft + 7, guiTop + 53, 79, 20,
|
||||
StatCollector.translateToLocal("gui.calculator.edit"));
|
||||
//buttonCalculate = new GuiButton(1, guiLeft+111, guiTop+7, 58, 20, StatCollector.translateToLocal("gui.calculator.calculate"));
|
||||
buttonView = new GuiButton(7, guiLeft + 90, guiTop + 53, 79, 20,
|
||||
StatCollector.translateToLocal("gui.calculator.view"));
|
||||
//buttonList.add(buttonCalculate);
|
||||
buttonList.add(new GuiButton(2, guiLeft + 101, guiTop + 7, 68, 20,
|
||||
StatCollector.translateToLocal("gui.calculator.add")));
|
||||
buttonList.add(buttonEdit);
|
||||
buttonList.add(buttonView);
|
||||
buttonList.add(buttonLeft);
|
||||
buttonList.add(buttonRight);
|
||||
buttonMode = new GuiButton(6, guiLeft + 89, guiTop + 139, 80, 20,
|
||||
StatCollector.translateToLocal("gui.calculator.input"));
|
||||
buttonList.add(buttonMode);
|
||||
textFieldAmount = new GuiTextField(fontRendererObj, guiLeft + 39, guiTop + 8, 57, 18);
|
||||
Slot dest = inventorySlots.getSlot(0);
|
||||
ItemStack itemStack = ((ContainerCalculator) inventorySlots).getPlayer().getHeldItem();
|
||||
dest.inventory.setInventorySlotContents(dest.getSlotIndex(), ItemStackWrapper.NBT.getItem(itemStack, "dest"));
|
||||
ItemStack calculatorItem = ((ContainerCalculator) inventorySlots).getPlayer().getHeldItem();
|
||||
for (int i = 0; i < recentLen; i++) {
|
||||
inventorySlots.getSlot(28 + i).putStack(ItemStackWrapper.NBT.getItem(calculatorItem, "recent" + i));
|
||||
}
|
||||
textFieldAmount.setText(ItemStackWrapper.NBT.getString(itemStack, "text"));
|
||||
mode = EnumMode.fromInt(ItemStackWrapper.NBT.getInt(calculatorItem, "mode"));
|
||||
init = true;
|
||||
onOpen();
|
||||
if (!JecaConfig.initialized) {
|
||||
ArrayList<String> idents = new ArrayList<>();
|
||||
LOOP:
|
||||
for (ICraftingHandler handler : GuiCraftingRecipe.craftinghandlers) {
|
||||
if (handler instanceof TemplateRecipeHandler) {
|
||||
if (((TemplateRecipeHandler) handler).getOverlayIdentifier() == null) {
|
||||
continue;
|
||||
}
|
||||
for (String id : idents) {
|
||||
if (((TemplateRecipeHandler) handler).getOverlayIdentifier().equals(id)) {
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
idents.add(((TemplateRecipeHandler) handler).getOverlayIdentifier());
|
||||
}
|
||||
}
|
||||
String[] strings = new String[idents.size()];
|
||||
for (int i = 0; i < idents.size(); i++) {
|
||||
strings[i] = idents.get(i);
|
||||
}
|
||||
JecaConfig.EnumItems.ListRecipeCategory.getProperty().set(strings);
|
||||
JecaConfig.save();
|
||||
JecaConfig.initialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
|
||||
//GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
this.mc.getTextureManager().bindTexture(
|
||||
new ResourceLocation(JustEnoughCalculation.Reference.MODID, "textures/gui/guiCalculator.png"));
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
|
||||
if (activeSlot == 0) {
|
||||
Slot slot = inventorySlots.getSlot(activeSlot);
|
||||
this.drawTexturedModalRect(this.guiLeft + slot.xDisplayPosition - 2,
|
||||
this.guiTop + slot.yDisplayPosition - 2, 176, 0, 20, 20);
|
||||
} else if (activeSlot > 0) {
|
||||
Slot slot = inventorySlots.getSlot(activeSlot);
|
||||
this.drawTexturedModalRect(this.guiLeft + slot.xDisplayPosition - 1,
|
||||
this.guiTop + slot.yDisplayPosition - 1, 196, 0, 18, 18);
|
||||
}
|
||||
textFieldAmount.drawTextBox();
|
||||
drawMissingTexture();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int p_146979_1_, int p_146979_2_) {
|
||||
super.drawGuiContainerForegroundLayer(p_146979_1_, p_146979_2_);
|
||||
fontRendererObj.drawString("x", 30, 13, 4210752);
|
||||
drawCenteredStringWithoutShadow(fontRendererObj, StatCollector.translateToLocal("gui.calculator.recent"), 143,
|
||||
36, 4210752);
|
||||
drawCenteredString(fontRendererObj, page + "/" + total, 46, 145, 0xFFFFFF);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String GetButtonTooltip(int buttonId) {
|
||||
switch (buttonId) {
|
||||
case 2:
|
||||
return StatCollector.translateToLocal("gui.calculator.addTooltip");
|
||||
case 3:
|
||||
return StatCollector.translateToLocal("gui.calculator.editTooltip");
|
||||
case 6:
|
||||
return StatCollector.translateToLocal("gui.calculator.modeTooltip");
|
||||
case 7:
|
||||
return StatCollector.translateToLocal("gui.calculator.viewTooltip");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) {
|
||||
switch (button.id) {
|
||||
/*case 1:
|
||||
if(inventorySlots.getSlot(0).getStack() != null){
|
||||
mode = EnumMode.INPUT;
|
||||
refreshRecipe();
|
||||
}
|
||||
break;*/
|
||||
case 2:
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().syncItemCalculator(inventorySlots.getSlot(0).getStack(),
|
||||
textFieldAmount.getText());
|
||||
mc.displayGuiScreen(new GuiRecipeEditor(new ContainerRecipeEditor(), this));
|
||||
break;
|
||||
case 3:
|
||||
List<Integer> list;
|
||||
if (activeSlot == -1) {
|
||||
list = JustEnoughCalculation.proxy.getPlayerHandler()
|
||||
.getAllRecipeIndexOf(inventorySlots.getSlot(0).getStack(), null);
|
||||
} else {
|
||||
list = JustEnoughCalculation.proxy.getPlayerHandler().getAllRecipeIndexOf(
|
||||
inventorySlots.getSlot(activeSlot).getStack(), null);
|
||||
}
|
||||
|
||||
mc.displayGuiScreen(new GuiRecipePicker(new ContainerRecipe(), this, list));
|
||||
break;
|
||||
case 4:
|
||||
if (page > 1) {
|
||||
page--;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (page < total) {
|
||||
page++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
switch (mode) {
|
||||
case INPUT:
|
||||
mode = EnumMode.PROCEDURE;
|
||||
break;
|
||||
case PROCEDURE:
|
||||
mode = EnumMode.OUTPUT;
|
||||
break;
|
||||
case OUTPUT:
|
||||
mode = EnumMode.CATALYST;
|
||||
break;
|
||||
case CATALYST:
|
||||
mode = EnumMode.INPUT;
|
||||
break;
|
||||
}
|
||||
ItemStack calculatorItem = ((ContainerCalculator) inventorySlots).getPlayer().getHeldItem();
|
||||
ItemStackWrapper.NBT.setInt(calculatorItem, "mode", mode.toInt());
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().syncItemCalculator(inventorySlots.getSlot(0).getStack(),
|
||||
textFieldAmount.getText());
|
||||
page = 1;
|
||||
break;
|
||||
case 7:
|
||||
mc.displayGuiScreen(new GuiRecipeViewer(new ContainerRecipeViewer(), this));
|
||||
break;
|
||||
}
|
||||
updateLayout();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
|
||||
//+JustEnoughCalculation.proxy.getPlayerHandler().syncItemCalculator(inventorySlots.getSlot(0).getStack(), textFieldAmount.getText());
|
||||
textFieldAmount.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
super.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
if (mouseButton == 1 && buttonMode.mousePressed(mc, mouseX, mouseY)) {
|
||||
switch (mode) {
|
||||
case INPUT:
|
||||
mode = EnumMode.CATALYST;
|
||||
break;
|
||||
case PROCEDURE:
|
||||
mode = EnumMode.INPUT;
|
||||
break;
|
||||
case OUTPUT:
|
||||
mode = EnumMode.PROCEDURE;
|
||||
break;
|
||||
case CATALYST:
|
||||
mode = EnumMode.OUTPUT;
|
||||
break;
|
||||
}
|
||||
mc.thePlayer.playSound("random.click", 0.8f, 0.8f);
|
||||
updateLayout();
|
||||
ItemStack calculatorItem = ((ContainerCalculator) inventorySlots).getPlayer().getHeldItem();
|
||||
ItemStackWrapper.NBT.setInt(calculatorItem, "mode", mode.toInt());
|
||||
}
|
||||
Slot s = getSlotUnderMouse(mouseX, mouseY);
|
||||
if (s != null && s.getSlotIndex() > 27 && s.getStack() != null) {
|
||||
inventorySlots.getSlot(0).putStack(s.getStack());
|
||||
mode = EnumMode.INPUT;
|
||||
refreshRecipe();
|
||||
updateLayout();
|
||||
} else if (s != null && s.getSlotIndex() > 0 && s.getSlotIndex() <= 27 && s.getStack() != null) {
|
||||
GuiCraftingRecipe.openRecipeGui("item", s.getStack().copy());
|
||||
}
|
||||
JustEnoughCalculation.proxy.getPlayerHandler()
|
||||
.syncItemCalculator(inventorySlots.getSlot(0).getStack(), textFieldAmount.getText());
|
||||
//Slot slot = getSlotUnderMouse(mouseX, mouseY);
|
||||
/*if(slot != null && slot.getSlotIndex() == 0 && mouseButton == 0){
|
||||
setActiveSlot(slot.getSlotIndex());
|
||||
((ContainerCalculator)inventorySlots).getPlayer().playSound("random.click", 1f, 1f );
|
||||
updateLayout();
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void keyTyped(char typedChar, int keyCode) {
|
||||
if (!this.textFieldAmount.textboxKeyTyped(typedChar, keyCode)) {
|
||||
if (keyCode == 1) {
|
||||
if (activeSlot != -1) {
|
||||
inventorySlots.getSlot(activeSlot).putStack(buffer);
|
||||
setActiveSlot(-1);
|
||||
} else {
|
||||
super.keyTyped(typedChar, keyCode);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().syncItemCalculator(inventorySlots.getSlot(0).getStack(),
|
||||
textFieldAmount.getText());
|
||||
|
||||
refreshRecipe();
|
||||
updateLayout();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateLayout() {
|
||||
switch (mode) {
|
||||
case OUTPUT:
|
||||
buttonMode.displayString = StatCollector.translateToLocal("gui.calculator.output");
|
||||
break;
|
||||
case PROCEDURE:
|
||||
buttonMode.displayString = StatCollector.translateToLocal("gui.calculator.procedure");
|
||||
break;
|
||||
case INPUT:
|
||||
buttonMode.displayString = StatCollector.translateToLocal("gui.calculator.input");
|
||||
break;
|
||||
case CATALYST:
|
||||
buttonMode.displayString = StatCollector.translateToLocal("gui.calculator.catalyst");
|
||||
break;
|
||||
}
|
||||
boolean b = JustEnoughCalculation.proxy.getPlayerHandler()
|
||||
.getHasRecipeOf(inventorySlots.getSlot(0).getStack(), null);
|
||||
if (activeSlot == -1) {
|
||||
buttonEdit.enabled = b;
|
||||
} else {
|
||||
buttonEdit.enabled = JustEnoughCalculation.proxy.getPlayerHandler().getHasRecipeOf(
|
||||
inventorySlots.getSlot(activeSlot).getStack(), null);
|
||||
}
|
||||
//buttonCalculate.enabled = b;
|
||||
buttonView.enabled = JustEnoughCalculation.proxy.getPlayerHandler().getHasRecipe(null);
|
||||
if (costRecord != null) {
|
||||
switch (mode) {
|
||||
case OUTPUT:
|
||||
total = (costRecord.getOutputStack().size() + 26) / 27;
|
||||
fillSlotsWith(costRecord.getOutputStack(), (page - 1) * 27);
|
||||
break;
|
||||
case PROCEDURE:
|
||||
total = (costRecord.getProcedureStack().size() + 26) / 27;
|
||||
fillSlotsWith(costRecord.getProcedureStack(), (page - 1) * 27);
|
||||
break;
|
||||
case INPUT:
|
||||
total = (costRecord.getInputStack().size() + 26) / 27;
|
||||
fillSlotsWith(costRecord.getInputStack(), (page - 1) * 27);
|
||||
break;
|
||||
case CATALYST:
|
||||
total = (costRecord.getCatalystStack().size() + 26) / 27;
|
||||
fillSlotsWith(costRecord.getCatalystStack(), (page - 1) * 27);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
fillSlotsWith(new ArrayList<ItemStack>(), 0);
|
||||
total = 0;
|
||||
}
|
||||
buttonLeft.enabled = page != 1;
|
||||
buttonRight.enabled = page < total;
|
||||
if (JecaConfig.EnumItems.EnableInventoryCheck.getProperty().getBoolean()) {
|
||||
checkItem();
|
||||
}
|
||||
}
|
||||
|
||||
public int getActiveSlot() {
|
||||
return activeSlot;
|
||||
}
|
||||
|
||||
public void setActiveSlot(int activeSlot) {
|
||||
if (activeSlot == -1) {
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().syncItemCalculator(inventorySlots.getSlot(0).getStack(),
|
||||
textFieldAmount.getText());
|
||||
} else {
|
||||
buffer = inventorySlots.getSlot(activeSlot).getStack();
|
||||
}
|
||||
this.activeSlot = activeSlot;
|
||||
updateLayout();
|
||||
}
|
||||
|
||||
public void onOpen() {
|
||||
if (inventorySlots.getSlot(0).getStack() != null) {
|
||||
refreshRecipe();
|
||||
}
|
||||
if (init) {
|
||||
updateLayout();
|
||||
}
|
||||
}
|
||||
|
||||
protected void fillSlotsWith(List<ItemStack> itemStacks, int start) {
|
||||
int pos = 1;
|
||||
for (int i = start; i < start + 27; i++) {
|
||||
if (i <= itemStacks.size() - 1) {
|
||||
ItemStack buffer = itemStacks.get(i);
|
||||
ItemStackWrapper.NBT.setBool(buffer, JustEnoughCalculation.Reference.MODID, true);
|
||||
inventorySlots.getSlot(pos++).putStack(buffer);
|
||||
} else {
|
||||
inventorySlots.getSlot(pos++).putStack(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void refreshRecipe() {
|
||||
ItemStack dest = inventorySlots.getSlot(0).getStack();
|
||||
int i;
|
||||
try {
|
||||
i = Integer.valueOf(textFieldAmount.getText());
|
||||
} catch (NumberFormatException e) {
|
||||
i = 1;
|
||||
textFieldAmount.setTextColor(16711680);
|
||||
TimerTask r = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
textFieldAmount.setTextColor(14737632);
|
||||
}
|
||||
};
|
||||
Timer t = new Timer();
|
||||
t.schedule(r, 1000);
|
||||
if (inventorySlots.getSlot(0).getStack() == null) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (dest == null) {
|
||||
return;
|
||||
}
|
||||
Calculator calculator = new Calculator(dest, i * 100);
|
||||
costRecord = calculator.getCost();
|
||||
dest = dest.copy();
|
||||
dest.getTagCompound().removeTag(JustEnoughCalculation.Reference.MODID);
|
||||
ItemStack calculatorItem = ((ContainerCalculator) inventorySlots).getPlayer().getHeldItem();
|
||||
ItemStack[] stack = new ItemStack[6];
|
||||
for (int j = 0; j < recentLen; j++) {
|
||||
stack[j] = ItemStackWrapper.NBT.getItem(calculatorItem, "recent" + j);
|
||||
}
|
||||
int duplicate = -1;
|
||||
for (int j = 0; j < recentLen; j++) {
|
||||
if (stack[j] != null && ItemStackWrapper.isTypeEqual(dest, stack[j])) {
|
||||
duplicate = j;
|
||||
}
|
||||
}
|
||||
if (duplicate == -1) {
|
||||
ItemStackWrapper.NBT.setItem(calculatorItem, "recent0", dest);
|
||||
inventorySlots.getSlot(28).putStack(dest);
|
||||
for (int j = 0; j < recentLen - 1; j++) {
|
||||
ItemStackWrapper.NBT.setItem(calculatorItem, "recent" + (j + 1), stack[j]);
|
||||
inventorySlots.getSlot(27 + 2 + j).putStack(stack[j]);
|
||||
}
|
||||
} else {
|
||||
ItemStackWrapper.NBT.setItem(calculatorItem, "recent0", dest);
|
||||
inventorySlots.getSlot(28).putStack(dest);
|
||||
for (int j = 0; j < duplicate; j++) {
|
||||
ItemStackWrapper.NBT.setItem(calculatorItem, "recent" + (j + 1), stack[j]);
|
||||
inventorySlots.getSlot(27 + 2 + j).putStack(stack[j]);
|
||||
}
|
||||
}
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().syncItemCalculator(dest, textFieldAmount.getText());
|
||||
}
|
||||
|
||||
protected void drawMissingTexture() {
|
||||
for (int i = 0; i < 27; i++) {
|
||||
Slot slot = inventorySlots.getSlot(i + 1);
|
||||
if (items.containsKey(i)) {
|
||||
int store = items.get(i);
|
||||
int a = store == 0 ? 0 : store * 0x8000000 + 0x12ff0000;
|
||||
drawRect(slot.xDisplayPosition + guiLeft - 1, slot.yDisplayPosition + guiTop - 1,
|
||||
slot.xDisplayPosition + guiLeft + 17, slot.yDisplayPosition + guiTop + 17, a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkItem() {
|
||||
if (mode != EnumMode.INPUT) {
|
||||
for (int i = 0; i < 27; i++) {
|
||||
items.put(i, 0);
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < 27; i++) {
|
||||
ItemStack itemStack = inventorySlots.getSlot(i + 1).getStack();
|
||||
if (itemStack == null) {
|
||||
items.put(i, 0);
|
||||
continue;
|
||||
}
|
||||
int amount = 0;
|
||||
for (ItemStack itemStackPlayer : mc.thePlayer.inventory.mainInventory) {
|
||||
if (ItemStackWrapper.isTypeEqual(itemStackPlayer, itemStack)) {
|
||||
amount += itemStackPlayer.stackSize;
|
||||
}
|
||||
}
|
||||
int d = (int) (amount / (double) ItemStackWrapper.getGhostItemAmount(itemStack) * 15);
|
||||
d = d > 15 ? 0 : 15 - d;
|
||||
items.put(i, d);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleDragNDrop(GuiContainer guiContainer, int i, int i1, ItemStack itemStack, int i2) {
|
||||
Slot slot = getSlotUnderMouse(i, i1);
|
||||
if (slot != null && slot.getSlotIndex() == 0) {
|
||||
ItemStack buffer = itemStack.copy();
|
||||
buffer.stackSize = 1;
|
||||
ItemStackWrapper.NBT.setBool(buffer, JustEnoughCalculation.Reference.MODID, true);
|
||||
ItemStackWrapper.NBT.setBool(buffer, "mark", true);
|
||||
slot.putStack(buffer);
|
||||
mode = EnumMode.INPUT;
|
||||
refreshRecipe();
|
||||
updateLayout();
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().syncItemCalculator(inventorySlots.getSlot(0).getStack(),
|
||||
textFieldAmount.getText());
|
||||
}
|
||||
itemStack.stackSize = 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.guis.calculator;
|
||||
|
||||
import net.minecraft.inventory.InventoryBasic;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class InventoryCalculator extends InventoryBasic {
|
||||
|
||||
public InventoryCalculator(ItemStack itemStack) {
|
||||
super("Calculator", false, 37);
|
||||
}
|
||||
}
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.guis.recipeEditor;
|
||||
|
||||
import me.towdium.jecalculation.gui.commom.recipe.ContainerRecipe;
|
||||
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class ContainerRecipeEditor extends ContainerRecipe {
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.guis.recipeEditor;
|
||||
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.core.Recipe;
|
||||
import me.towdium.jecalculation.gui.commom.recipe.ContainerRecipe;
|
||||
import me.towdium.jecalculation.gui.commom.recipe.GuiRecipe;
|
||||
import me.towdium.jecalculation.network.packets.PacketRecipeUpdate;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.util.StatCollector;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class GuiRecipeEditor extends GuiRecipe {
|
||||
int index = -1;
|
||||
|
||||
public GuiRecipeEditor(ContainerRecipeEditor containerRecipeEditor, GuiScreen parent, int index) {
|
||||
super(containerRecipeEditor, parent);
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
public GuiRecipeEditor(ContainerRecipeEditor containerRecipeEditor, GuiScreen parent) {
|
||||
super(containerRecipeEditor, parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int mouseX, int mouseY, float f) {
|
||||
super.drawScreen(mouseX, mouseY, f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
buttonList.add(new GuiButton(16, guiLeft + 125, guiTop + 7, 44, 20,
|
||||
StatCollector.translateToLocal("gui.recipeEditor.save")));
|
||||
buttonList.add(new GuiButton(17, guiLeft + 125, guiTop + 31, 44, 20,
|
||||
StatCollector.translateToLocal("gui.recipeEditor.clear")));
|
||||
if (index != -1) {
|
||||
displayRecipe(JustEnoughCalculation.proxy.getPlayerHandler().getRecipe(index, null));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) {
|
||||
super.actionPerformed(button);
|
||||
int buttonId = button.id;
|
||||
if (buttonId == 16) {
|
||||
Recipe recipe = ((ContainerRecipe) inventorySlots).buildRecipe();
|
||||
if (recipe == null) {
|
||||
mc.displayGuiScreen(parent);
|
||||
return;
|
||||
}
|
||||
if (index == -1) {
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().addRecipe(recipe, null);
|
||||
JustEnoughCalculation.network.sendToServer(new PacketRecipeUpdate(recipe, -1));
|
||||
mc.displayGuiScreen(parent);
|
||||
} else {
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().setRecipe(recipe, index, null);
|
||||
JustEnoughCalculation.network.sendToServer(new PacketRecipeUpdate(recipe, index));
|
||||
mc.displayGuiScreen(parent);
|
||||
}
|
||||
} else if (buttonId == 17) {
|
||||
for (Object slot : inventorySlots.inventorySlots) {
|
||||
((Slot) slot).inventory.setInventorySlotContents(((Slot) slot).getSlotIndex(), null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.guis.recipePicker;
|
||||
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.gui.commom.recipe.ContainerRecipe;
|
||||
import me.towdium.jecalculation.gui.commom.recipe.GuiRecipe;
|
||||
import me.towdium.jecalculation.gui.guis.recipeEditor.ContainerRecipeEditor;
|
||||
import me.towdium.jecalculation.gui.guis.recipeEditor.GuiRecipeEditor;
|
||||
import me.towdium.jecalculation.network.packets.PacketRecipeUpdate;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.util.StatCollector;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class GuiRecipePicker extends GuiRecipe {
|
||||
protected List<Integer> recipes;
|
||||
protected int index;
|
||||
protected GuiButton buttonLeft;
|
||||
protected GuiButton buttonRight;
|
||||
|
||||
public GuiRecipePicker(ContainerRecipe containerRecipe, GuiScreen parent, List<Integer> recipes) {
|
||||
super(containerRecipe, parent);
|
||||
this.recipes = recipes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
buttonLeft = new GuiButton(16, guiLeft + 125, guiTop + 7, 20, 20, "<");
|
||||
buttonRight = new GuiButton(17, guiLeft + 149, guiTop + 7, 20, 20, ">");
|
||||
buttonList.add(buttonLeft);
|
||||
buttonList.add(buttonRight);
|
||||
buttonList.add(new GuiButton(18, guiLeft + 125, guiTop + 31, 44, 20,
|
||||
StatCollector.translateToLocal("gui.recipePicker.delete")));
|
||||
updateLayout();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) {
|
||||
super.actionPerformed(button);
|
||||
int buttonId = button.id;
|
||||
if (buttonId >= 0 && buttonId <= 15) {
|
||||
GuiRecipeEditor recipeEditor = new GuiRecipeEditor(new ContainerRecipeEditor(), parent, recipes.get(index));
|
||||
mc.displayGuiScreen(recipeEditor);
|
||||
recipeEditor
|
||||
.displayRecipe(JustEnoughCalculation.proxy.getPlayerHandler().getRecipe(recipes.get(index), null));
|
||||
recipeEditor.click(buttonId);
|
||||
} else if (buttonId == 16) {
|
||||
if (index > 0) {
|
||||
index--;
|
||||
updateLayout();
|
||||
}
|
||||
} else if (buttonId == 17) {
|
||||
if (index < recipes.size() - 1) {
|
||||
index++;
|
||||
updateLayout();
|
||||
}
|
||||
} else if (buttonId == 18) {
|
||||
JustEnoughCalculation.proxy.getPlayerHandler().removeRecipe(recipes.get(index), null);
|
||||
JustEnoughCalculation.network.sendToServer(new PacketRecipeUpdate(null, recipes.get(index)));
|
||||
mc.displayGuiScreen(parent);
|
||||
}
|
||||
}
|
||||
|
||||
/*@Override
|
||||
protected void mouseClicked(int mouseX, int mouseY, int mouseButton){
|
||||
super.mouseClicked(mouseX, mouseY, mouseButton);
|
||||
Slot slot = getSlotUnderMouse(mouseX, mouseY);
|
||||
if(slot != null){
|
||||
GuiRecipeEditor recipeEditor = new GuiRecipeEditor(new ContainerRecipeEditor(), parent, recipes.get(index));
|
||||
mc.displayGuiScreen(recipeEditor);
|
||||
recipeEditor.displayRecipe(JustEnoughCalculation.proxy.getPlayerHandler().getRecipe(recipes.get(index), null));
|
||||
recipeEditor.click(mouseX, mouseY, mouseButton);
|
||||
if(slot.getStack() == null){
|
||||
recipeEditor.setActiveSlot(slot.getSlotIndex());
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
public void updateLayout() {
|
||||
displayRecipe(JustEnoughCalculation.proxy.getPlayerHandler().getRecipe(recipes.get(index), null));
|
||||
buttonRight.enabled = index != recipes.size() - 1;
|
||||
buttonLeft.enabled = index != 0;
|
||||
}
|
||||
}
|
||||
-53
@@ -1,53 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.guis.recipeViewer;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.InventoryBasic;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class ContainerRecipeViewer extends Container {
|
||||
InventoryBasic inventory = new InventoryBasic("RecipeViewer", false, 24);
|
||||
|
||||
public ContainerRecipeViewer() {
|
||||
int i, left, top;
|
||||
i = 0;
|
||||
left = 8;
|
||||
top = 8;
|
||||
for (int a = 0; a < 6; a++) {
|
||||
for (int b = 0; b < 4; b++) {
|
||||
addSlotToContainer(new Slot(inventory, i + 4 * a + b, left + b * 18, top + a * 22));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer playerIn) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack slotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Slot getSlot(int p_75139_1_) {
|
||||
if (p_75139_1_ <= 23)
|
||||
return super.getSlot(p_75139_1_);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStackInSlot(int p_75141_1_, ItemStack p_75141_2_) {
|
||||
}
|
||||
}
|
||||
@@ -1,148 +0,0 @@
|
||||
package me.towdium.jecalculation.gui.guis.recipeViewer;
|
||||
|
||||
import cpw.mods.fml.client.config.GuiButtonExt;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.core.ItemStackWrapper;
|
||||
import me.towdium.jecalculation.core.Recipe;
|
||||
import me.towdium.jecalculation.gui.commom.GuiJustEnoughCalculation;
|
||||
import me.towdium.jecalculation.gui.guis.recipeEditor.ContainerRecipeEditor;
|
||||
import me.towdium.jecalculation.gui.guis.recipeEditor.GuiRecipeEditor;
|
||||
import me.towdium.jecalculation.network.packets.PacketRecipeUpdate;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.StatCollector;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class GuiRecipeViewer extends GuiJustEnoughCalculation {
|
||||
List<Integer> recipes;
|
||||
GuiButton buttonLeft;
|
||||
GuiButton buttonRight;
|
||||
int page = 1;
|
||||
int total;
|
||||
|
||||
public GuiRecipeViewer(@Nonnull ContainerRecipeViewer container, @Nullable GuiScreen parent) {
|
||||
super(container, parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
buttonLeft = new GuiButton(0, guiLeft + 7, guiTop + 139, 20, 20, "<");
|
||||
buttonRight = new GuiButton(1, guiLeft + 149, guiTop + 139, 20, 20, ">");
|
||||
buttonList.add(buttonLeft);
|
||||
buttonList.add(buttonRight);
|
||||
for (int i = 0; i < 6; i++) {
|
||||
buttonList.add(new GuiButtonExt(2 + 2 * i, guiLeft + 83, guiTop + 7 + 22 * i, 41, 18,
|
||||
StatCollector.translateToLocal("gui.recipeViewer.edit")));
|
||||
buttonList.add(new GuiButtonExt(3 + 2 * i, guiLeft + 128, guiTop + 7 + 22 * i, 41, 18,
|
||||
StatCollector.translateToLocal("gui.recipeViewer.delete")));
|
||||
}
|
||||
updateLayout();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
|
||||
//GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
mc.getTextureManager()
|
||||
.bindTexture(new ResourceLocation(JustEnoughCalculation.Reference.MODID, "textures/gui/guiRecipeViewer.png"));
|
||||
drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||
drawCenteredString(fontRendererObj, page + "/" + total, 88, 145, 0xFFFFFF);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLayout() {
|
||||
recipes = JustEnoughCalculation.proxy.getPlayerHandler().getAllRecipeIndex(null);
|
||||
total = recipes == null ? 0 : (recipes.size() + 5) / 6;
|
||||
if (page > total && page != 1) {
|
||||
page = total;
|
||||
}
|
||||
displayRecipes();
|
||||
for (int i = 0; i < 6; i++) {
|
||||
boolean flag = recipes.size() > (page - 1) * 6 + i;
|
||||
((GuiButton) buttonList.get(2 + 2 * i)).enabled = flag;
|
||||
((GuiButton) buttonList.get(3 + 2 * i)).enabled = flag;
|
||||
}
|
||||
buttonLeft.enabled = page != 1;
|
||||
buttonRight.enabled = page < total;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) {
|
||||
int i = button.id;
|
||||
switch (i) {
|
||||
case 0:
|
||||
page--;
|
||||
updateLayout();
|
||||
break;
|
||||
case 1:
|
||||
page++;
|
||||
updateLayout();
|
||||
break;
|
||||
default:
|
||||
if (i % 2 == 0) {
|
||||
mc.displayGuiScreen(new GuiRecipeEditor(new ContainerRecipeEditor(), this,
|
||||
recipes.get((page - 1) * 6 + i / 2 - 1)));
|
||||
} else {
|
||||
JustEnoughCalculation.proxy.getPlayerHandler()
|
||||
.removeRecipe(recipes.get((page - 1) * 6 + i / 2 - 1), null);
|
||||
JustEnoughCalculation.network
|
||||
.sendToServer(new PacketRecipeUpdate(null, recipes.get((page - 1) * 6 + i / 2 - 1)));
|
||||
updateLayout();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* display the recipe at the position
|
||||
*
|
||||
* @param position range 1-6
|
||||
*/
|
||||
public void displayRecipe(@Nullable Recipe recipe, int position) {
|
||||
if (recipe != null) {
|
||||
List<ItemStack> items = recipe.getOutput();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (i < items.size()) {
|
||||
ItemStack buffer = items.get(i);
|
||||
ItemStackWrapper.NBT.setBool(buffer, JustEnoughCalculation.Reference.MODID, true);
|
||||
inventorySlots.getSlot((position - 1) * 4 + i).putStack(buffer);
|
||||
} else {
|
||||
inventorySlots.getSlot((position - 1) * 4 + i).putStack(null);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
inventorySlots.getSlot((position - 1) * 4 + i).putStack(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void displayRecipes() {
|
||||
if (recipes != null) {
|
||||
for (int i = 1; i <= 6; i++) {
|
||||
int index = i - 1 + 6 * (page - 1);
|
||||
if (index < recipes.size()) {
|
||||
displayRecipe(JustEnoughCalculation.proxy.getPlayerHandler().getRecipe(recipes.get(index), null),
|
||||
i);
|
||||
} else {
|
||||
displayRecipe(null, i);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 1; i <= 6; i++) {
|
||||
displayRecipe(null, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package me.towdium.jecalculation.nei;
|
||||
|
||||
import codechicken.nei.PositionedStack;
|
||||
import codechicken.nei.api.IOverlayHandler;
|
||||
import codechicken.nei.recipe.IRecipeHandler;
|
||||
import me.towdium.jecalculation.core.ItemStackHelper;
|
||||
import me.towdium.jecalculation.gui.guis.GuiEditor;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class JecaOverlayHandler implements IOverlayHandler {
|
||||
@Override
|
||||
public void overlayRecipe(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex, boolean shift) {
|
||||
if(firstGui instanceof GuiEditor) {
|
||||
List<ItemStack> inputStacks = new ArrayList<>();
|
||||
LOOP:
|
||||
for (PositionedStack positionedStack : recipe.getIngredientStacks(recipeIndex)) {
|
||||
ItemStack itemStack = positionedStack.items[0];
|
||||
for (ItemStack exist : inputStacks) {
|
||||
if (ItemStackHelper.isTypeEqual(exist, itemStack)) {
|
||||
exist.stackSize += itemStack.stackSize;
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
inputStacks.add(itemStack.copy());
|
||||
}
|
||||
ItemStack outputStack = recipe.getResultStack(recipeIndex).items[0];
|
||||
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
mc.displayGuiScreen(new GuiEditor(firstGui));
|
||||
GuiContainer myGuiContainer = (GuiContainer) mc.currentScreen;
|
||||
if (myGuiContainer != null) {
|
||||
myGuiContainer.inventorySlots.getSlot(0).putStack(outputStack);
|
||||
for (int i = 8; i <= 8 + inputStacks.size() - 1 && i <= 19; i++) {
|
||||
myGuiContainer.inventorySlots.getSlot(i).putStack(inputStacks.get(i - 8));
|
||||
}
|
||||
//crafting item, nei may not have
|
||||
// myGuiContainer.inventorySlots.getSlot(4).putStack();
|
||||
}
|
||||
|
||||
} else {
|
||||
System.out.println(firstGui.getClass().toString());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package me.towdium.jecalculation.nei;
|
||||
|
||||
import codechicken.nei.guihook.IContainerTooltipHandler;
|
||||
import me.towdium.jecalculation.gui.JecaGuiContainer;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class JecaTooltipHandler implements IContainerTooltipHandler {
|
||||
@Override
|
||||
public List<String> handleTooltip(GuiContainer gui, int mousex, int mousey, List<String> currenttip) {
|
||||
return currenttip;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> handleItemDisplayName(GuiContainer gui, ItemStack itemstack, List<String> currenttip) {
|
||||
if (gui instanceof JecaGuiContainer) {
|
||||
((JecaGuiContainer)gui).handleMouseOverNEIItemPanel(itemstack);
|
||||
}
|
||||
return currenttip;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> handleItemTooltip(GuiContainer gui,
|
||||
ItemStack itemstack,
|
||||
int mousex,
|
||||
int mousey,
|
||||
List<String> currenttip) {
|
||||
if (gui instanceof JecaGuiContainer) {
|
||||
((JecaGuiContainer)gui).handleMouseOverNEIItemPanel(itemstack);
|
||||
}
|
||||
return currenttip;
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package me.towdium.jecalculation.nei;
|
||||
|
||||
import codechicken.nei.PositionedStack;
|
||||
import codechicken.nei.api.IOverlayHandler;
|
||||
import codechicken.nei.recipe.IRecipeHandler;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.core.ItemStackWrapper;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Towdium on 2016/3/21.
|
||||
*/
|
||||
public class MyOverlayHandler implements IOverlayHandler {
|
||||
@Override
|
||||
public void overlayRecipe(GuiContainer guiContainer, IRecipeHandler iRecipeHandler, int i, boolean b) {
|
||||
ItemStack buffer = iRecipeHandler.getResultStack(i).item.copy();
|
||||
ItemStackWrapper.NBT.setBool(buffer, JustEnoughCalculation.Reference.MODID, true);
|
||||
guiContainer.inventorySlots.getSlot(0).putStack(buffer);
|
||||
List<ItemStack> itemStacks = new ArrayList<>();
|
||||
LOOP:
|
||||
for (PositionedStack item : iRecipeHandler.getIngredientStacks(i)) {
|
||||
for (ItemStack current : itemStacks) {
|
||||
if (ItemStackWrapper.isTypeEqual(current, item.items[0])) {
|
||||
current.stackSize++;
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
itemStacks.add(item.items[0].copy());
|
||||
}
|
||||
int index = 4;
|
||||
for (ItemStack itemStack : itemStacks) {
|
||||
ItemStackWrapper.NBT.setBool(itemStack, JustEnoughCalculation.Reference.MODID, true);
|
||||
guiContainer.inventorySlots.getSlot(index++).putStack(itemStack);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,27 +2,19 @@ package me.towdium.jecalculation.nei;
|
||||
|
||||
import codechicken.nei.api.API;
|
||||
import codechicken.nei.api.IConfigureNEI;
|
||||
import me.towdium.jecalculation.JecaConfig;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.gui.guis.recipeEditor.GuiRecipeEditor;
|
||||
|
||||
import me.towdium.jecalculation.gui.guis.GuiEditor;
|
||||
|
||||
public class NEICalculatorConfig implements IConfigureNEI {
|
||||
|
||||
@Override
|
||||
public void loadConfig() {
|
||||
LOOP:
|
||||
for (String s : JecaConfig.EnumItems.ListRecipeCategory.getProperty().getStringList()) {
|
||||
for (String b : JecaConfig.EnumItems.ListRecipeBlackList.getProperty()
|
||||
.getStringList()) {
|
||||
if (s.equals(b)) {
|
||||
continue LOOP;
|
||||
}
|
||||
}
|
||||
API.registerGuiOverlay(GuiRecipeEditor.class, s);
|
||||
API.registerGuiOverlayHandler(GuiRecipeEditor.class, new MyOverlayHandler(), s);
|
||||
System.out.println("loaded nei config");
|
||||
String [] recipeType = new String[]{ "crafting", "crafting2x2", "smelting", "fuel", "brewing"};
|
||||
for (String ident : recipeType) {
|
||||
API.registerGuiOverlay(GuiEditor.class, ident);
|
||||
API.registerGuiOverlayHandler(GuiEditor.class, new JecaOverlayHandler(), ident);
|
||||
}
|
||||
//API.registerGuiOverlay(GuiRecipeEditor.class, "crafting");
|
||||
//API.registerGuiOverlayHandler(GuiRecipeEditor.class, new MyOverlayHandler(), "crafting");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package me.towdium.jecalculation.nei;
|
||||
|
||||
import codechicken.nei.api.API;
|
||||
import codechicken.nei.guihook.GuiContainerManager;
|
||||
import me.towdium.jecalculation.gui.guis.GuiEditor;
|
||||
|
||||
public class NEIPlugin {
|
||||
public static void init() {
|
||||
GuiContainerManager.addTooltipHandler(new JecaTooltipHandler());
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package me.towdium.jecalculation.network;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import me.towdium.jecalculation.core.Recipe;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public interface IPlayerHandler {
|
||||
|
||||
boolean getHasRecipeOf(ItemStack itemStack, UUID uuid);
|
||||
|
||||
Recipe getRecipeOf(ItemStack itemStack, UUID uuid);
|
||||
|
||||
ImmutableList<Recipe> getAllRecipeOf(ItemStack itemStack, UUID uuid);
|
||||
|
||||
int getRecipeIndexOf(ItemStack itemStack, UUID uuid);
|
||||
|
||||
ImmutableList<Integer> getAllRecipeIndexOf(ItemStack itemStack, UUID uuid);
|
||||
|
||||
void addRecipe(Recipe recipe, UUID uuid);
|
||||
|
||||
void removeRecipe(int index, UUID uuid);
|
||||
|
||||
void setRecipe(Recipe recipe, int index, UUID uuid);
|
||||
|
||||
Recipe getRecipe(int index, UUID uuid);
|
||||
|
||||
void syncItemCalculator(ItemStack itemIn, String string);
|
||||
|
||||
void handleLogin(net.minecraftforge.event.entity.player.PlayerEvent.LoadFromFile event);
|
||||
|
||||
void handleSave(net.minecraftforge.event.entity.player.PlayerEvent.SaveToFile event);
|
||||
|
||||
boolean removeRecipe(Recipe recipe, UUID uuid);
|
||||
|
||||
boolean containsRecipe(Recipe recipe, UUID uuid);
|
||||
|
||||
boolean getHasRecipe(UUID uuid);
|
||||
|
||||
ImmutableList<Recipe> getAllRecipe(UUID uuid);
|
||||
|
||||
ImmutableList<Integer> getAllRecipeIndex(UUID uuid);
|
||||
}
|
||||
@@ -1,14 +1,5 @@
|
||||
package me.towdium.jecalculation.network;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
|
||||
|
||||
public interface IProxy {
|
||||
IPlayerHandler getPlayerHandler();
|
||||
|
||||
void init();
|
||||
|
||||
|
||||
}
|
||||
@@ -1,211 +0,0 @@
|
||||
package me.towdium.jecalculation.network;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.core.ItemStackWrapper;
|
||||
import me.towdium.jecalculation.core.Recipe;
|
||||
import me.towdium.jecalculation.network.packets.PacketCalculatorUpdate;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompressedStreamTools;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class PlayerHandlerClient implements IPlayerHandler {
|
||||
public List<Recipe> recipes = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void addRecipe(Recipe recipe, UUID uuid) {
|
||||
for (Recipe oneRecipe : recipes) {
|
||||
if (oneRecipe.equals(recipe)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (recipe != null) {
|
||||
recipes.add(recipe);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getHasRecipe(UUID uuid) {
|
||||
return recipes.size() != 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<Integer> getAllRecipeIndex(UUID uuid) {
|
||||
int a = recipes.size();
|
||||
ImmutableList.Builder<Integer> builder = new ImmutableList.Builder<>();
|
||||
for (int i = 0; i < a; i++) {
|
||||
builder.add(i);
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getHasRecipeOf(ItemStack itemStack, UUID uuid) {
|
||||
if (itemStack == null) {
|
||||
return false;
|
||||
}
|
||||
for (Recipe recipe : recipes) {
|
||||
if (recipe.getHasOutput(itemStack)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Recipe getRecipeOf(ItemStack itemStack, UUID uuid) {
|
||||
int i = getRecipeIndexOf(itemStack, null);
|
||||
if (i == -1) {
|
||||
return null;
|
||||
} else {
|
||||
return recipes.get(i);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<Recipe> getAllRecipeOf(ItemStack itemStack, UUID uuid) {
|
||||
ImmutableList.Builder<Recipe> recipeBuilder = new ImmutableList.Builder<>();
|
||||
for (Integer index : getAllRecipeIndexOf(itemStack, null)) {
|
||||
recipeBuilder.add(recipes.get(index));
|
||||
}
|
||||
return recipeBuilder.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRecipeIndexOf(ItemStack itemStack, UUID uuid) {
|
||||
int[] result = new int[]{-1, -1, -1, -1};
|
||||
for (int[] record : getAllUnsortedRecipeIndexOf(itemStack)) {
|
||||
result[record[1]] = record[0];
|
||||
}
|
||||
for (int index : result) {
|
||||
if (index != -1) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<Integer> getAllRecipeIndexOf(ItemStack itemStack, UUID uuid) {
|
||||
ImmutableList.Builder<ImmutableList.Builder<Integer>> builder1 = new ImmutableList.Builder<>();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
builder1.add(new ImmutableList.Builder<>());
|
||||
}
|
||||
ImmutableList<ImmutableList.Builder<Integer>> resultBuffer = builder1.build();
|
||||
for (int[] result : getAllUnsortedRecipeIndexOf(itemStack)) {
|
||||
resultBuffer.get(result[1]).add(result[0]);
|
||||
}
|
||||
ImmutableList.Builder<Integer> builder2 = new ImmutableList.Builder<>();
|
||||
for (ImmutableList.Builder<Integer> priority : resultBuffer) {
|
||||
builder2.addAll(priority.build().reverse());
|
||||
}
|
||||
return builder2.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeRecipe(int index, UUID uuid) {
|
||||
recipes.remove(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRecipe(Recipe recipe, int index, UUID uuid) {
|
||||
recipes.set(index, recipe);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Recipe getRecipe(int index, UUID uuid) {
|
||||
return index < recipes.size() ? recipes.get(index) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void syncItemCalculator(ItemStack itemIn, String string) {
|
||||
ItemStack itemStack = Minecraft.getMinecraft().thePlayer.getHeldItem();
|
||||
ItemStackWrapper.NBT.setItem(itemStack, "dest", itemIn);
|
||||
ItemStackWrapper.NBT.setString(itemStack, "text", string);
|
||||
JustEnoughCalculation.network.sendToServer(new PacketCalculatorUpdate(itemStack));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleLogin(PlayerEvent.LoadFromFile event) {
|
||||
try {
|
||||
FileInputStream stream = new FileInputStream(event.getPlayerFile("jeca"));
|
||||
NBTTagCompound tagCompound = CompressedStreamTools.readCompressed(stream);
|
||||
readFromNBT(tagCompound);
|
||||
} catch (Exception e) {
|
||||
recipes = new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleSave(PlayerEvent.SaveToFile event) {
|
||||
try {
|
||||
File file = event.getPlayerFile("jeca");
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
writeToNBT(compound);
|
||||
FileOutputStream fileoutputstream = new FileOutputStream(file);
|
||||
CompressedStreamTools.writeCompressed(compound, fileoutputstream);
|
||||
} catch (Exception e) {
|
||||
JustEnoughCalculation.logger.warn("Fail to save records for" + event.entityPlayer.getDisplayName());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeRecipe(Recipe recipe, UUID uuid) {
|
||||
return recipes.remove(recipe);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsRecipe(Recipe recipe, UUID uuid) {
|
||||
return recipes.contains(recipe);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<Recipe> getAllRecipe(UUID uuid) {
|
||||
return ImmutableList.copyOf(recipes);
|
||||
}
|
||||
|
||||
ImmutableList<int[]> getAllUnsortedRecipeIndexOf(ItemStack itemStack) {
|
||||
ImmutableList.Builder<int[]> builder = new ImmutableList.Builder<>();
|
||||
int size = recipes.size();
|
||||
int buffer;
|
||||
for (int i = 0; i < size; i++) {
|
||||
buffer = recipes.get(i).getOutputIndex(itemStack);
|
||||
if (buffer != -1) {
|
||||
builder.add(new int[]{i, buffer});
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound tagCompound) {
|
||||
int amount = tagCompound.getInteger("amount");
|
||||
List<Recipe> recipes = new ArrayList<>(amount);
|
||||
for (int i = 0; i < amount; i++) {
|
||||
Recipe buffer = Recipe.NBTUtl.fromNBT((NBTTagCompound) tagCompound.getTag(String.valueOf(i)));
|
||||
if (buffer != null) {
|
||||
recipes.add(buffer);
|
||||
}
|
||||
}
|
||||
this.recipes = recipes;
|
||||
}
|
||||
|
||||
public void writeToNBT(NBTTagCompound tagCompound) {
|
||||
tagCompound.setInteger("amount", recipes.size());
|
||||
int index = 0;
|
||||
for (Recipe recipe : recipes) {
|
||||
tagCompound.setTag(String.valueOf(index++), Recipe.NBTUtl.toNBT(recipe));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,108 +0,0 @@
|
||||
package me.towdium.jecalculation.network;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import me.towdium.jecalculation.core.Recipe;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class PlayerHandlerServer implements IPlayerHandler {
|
||||
private HashMap<UUID, PlayerHandlerClient> players = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public boolean getHasRecipeOf(ItemStack itemStack, UUID uuid) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Recipe getRecipeOf(ItemStack itemStack, UUID uuid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<Recipe> getAllRecipeOf(ItemStack itemStack, UUID uuid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRecipeIndexOf(ItemStack itemStack, UUID uuid) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<Integer> getAllRecipeIndexOf(ItemStack itemStack, UUID uuid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRecipe(Recipe recipe, UUID uuid) {
|
||||
players.get(uuid).addRecipe(recipe, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeRecipe(int index, UUID uuid) {
|
||||
players.get(uuid).removeRecipe(index, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRecipe(Recipe recipe, int index, UUID uuid) {
|
||||
players.get(uuid).setRecipe(recipe, index, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<Recipe> getAllRecipe(UUID uuid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<Integer> getAllRecipeIndex(UUID uuid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Recipe getRecipe(int index, UUID uuid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void syncItemCalculator(ItemStack itemIn, String string) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleLogin(PlayerEvent.LoadFromFile event) {
|
||||
PlayerHandlerClient client = new PlayerHandlerClient();
|
||||
client.handleLogin(event);
|
||||
players.put(event.entityPlayer.getUniqueID(), client);
|
||||
//JustEnoughCalculation.networkWrapper.sendTo(new PacketSyncRecord(client), ((EntityPlayerMP) event.entityPlayer));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getHasRecipe(UUID uuid) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleSave(PlayerEvent.SaveToFile event) {
|
||||
players.get(UUID.fromString(event.playerUUID)).handleSave(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeRecipe(Recipe recipe, UUID uuid) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsRecipe(Recipe recipe, UUID uuid) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public PlayerHandlerClient getClient(UUID uuid) {
|
||||
return players.get(uuid);
|
||||
}
|
||||
}
|
||||
@@ -2,30 +2,11 @@ package me.towdium.jecalculation.network;
|
||||
|
||||
import cpw.mods.fml.common.network.NetworkRegistry;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.event.GuiEventHandler;
|
||||
import me.towdium.jecalculation.event.PlayerEventHandler;
|
||||
import me.towdium.jecalculation.gui.GuiHandler;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class ProxyClient implements IProxy {
|
||||
PlayerHandlerClient playerHandler = new PlayerHandlerClient();
|
||||
|
||||
@Override
|
||||
public IPlayerHandler getPlayerHandler() {
|
||||
return playerHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
NetworkRegistry.INSTANCE.registerGuiHandler(JustEnoughCalculation.instance, new GuiHandler());
|
||||
MinecraftForge.EVENT_BUS.register(new GuiEventHandler());
|
||||
MinecraftForge.EVENT_BUS.register(new PlayerEventHandler());
|
||||
}
|
||||
|
||||
public void setPlayerHandler(PlayerHandlerClient playerHandler) {
|
||||
this.playerHandler = playerHandler;
|
||||
NetworkRegistry.INSTANCE.registerGuiHandler(JustEnoughCalculation.INSTANCE, new GuiHandler());
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,8 @@
|
||||
package me.towdium.jecalculation.network;
|
||||
|
||||
import me.towdium.jecalculation.event.PlayerEventHandler;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class ProxyServer implements IProxy {
|
||||
public static PlayerHandlerServer playerHandler = new PlayerHandlerServer();
|
||||
|
||||
@Override
|
||||
public IPlayerHandler getPlayerHandler() {
|
||||
return playerHandler;
|
||||
}
|
||||
|
||||
public class ProxyServer implements IProxy{
|
||||
@Override
|
||||
public void init() {
|
||||
MinecraftForge.EVENT_BUS.register(new PlayerEventHandler());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
package me.towdium.jecalculation.network.packets;
|
||||
|
||||
import cpw.mods.fml.common.network.ByteBufUtils;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import me.towdium.jecalculation.JecaItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class PacketCalculatorUpdate implements IMessage, IMessageHandler<PacketCalculatorUpdate, IMessage> {
|
||||
ItemStack itemStack;
|
||||
|
||||
public PacketCalculatorUpdate() {
|
||||
}
|
||||
|
||||
public PacketCalculatorUpdate(ItemStack itemStack) {
|
||||
this.itemStack = itemStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
itemStack = ByteBufUtils.readItemStack(buf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
ByteBufUtils.writeItemStack(buf, itemStack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(PacketCalculatorUpdate message, MessageContext ctx) {
|
||||
if (ctx.getServerHandler().playerEntity.getHeldItem().getItem() instanceof JecaItem) {
|
||||
ctx.getServerHandler().playerEntity.inventory
|
||||
.setInventorySlotContents(ctx.getServerHandler().playerEntity.inventory.currentItem,
|
||||
message.itemStack);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
package me.towdium.jecalculation.network.packets;
|
||||
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.core.Recipe;
|
||||
import me.towdium.jecalculation.network.IPlayerHandler;
|
||||
import me.towdium.jecalculation.network.PlayerHandlerServer;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class PacketRecipeUpdate implements IMessage, IMessageHandler<PacketRecipeUpdate, IMessage> {
|
||||
Recipe recipe;
|
||||
int index;
|
||||
|
||||
public PacketRecipeUpdate() {
|
||||
}
|
||||
|
||||
public PacketRecipeUpdate(Recipe recipe, int index) {
|
||||
this.recipe = recipe;
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buffer) {
|
||||
buffer.writeInt(index);
|
||||
Recipe.ByteBufUtl.toByte(buffer, recipe);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buffer) {
|
||||
index = buffer.readInt();
|
||||
recipe = Recipe.ByteBufUtl.fromByte(buffer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(PacketRecipeUpdate message, MessageContext context) {
|
||||
IPlayerHandler playerHandler = JustEnoughCalculation.proxy.getPlayerHandler();
|
||||
if (playerHandler instanceof PlayerHandlerServer) {
|
||||
UUID uuid = context.getServerHandler().playerEntity.getUniqueID();
|
||||
if (message.index == -1) {
|
||||
playerHandler.addRecipe(message.recipe, uuid);
|
||||
} else if (message.recipe != null) {
|
||||
playerHandler.setRecipe(message.recipe, message.index, uuid);
|
||||
} else {
|
||||
playerHandler.removeRecipe(index, uuid);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
package me.towdium.jecalculation.network.packets;
|
||||
|
||||
import cpw.mods.fml.common.network.ByteBufUtils;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import me.towdium.jecalculation.JustEnoughCalculation;
|
||||
import me.towdium.jecalculation.network.PlayerHandlerClient;
|
||||
import me.towdium.jecalculation.network.PlayerHandlerServer;
|
||||
import me.towdium.jecalculation.network.ProxyClient;
|
||||
import me.towdium.jecalculation.network.ProxyServer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Towdium
|
||||
*/
|
||||
public class PacketSyncRecord implements IMessage, IMessageHandler<PacketSyncRecord, IMessage> {
|
||||
PlayerHandlerClient client;
|
||||
|
||||
public PacketSyncRecord() {
|
||||
}
|
||||
|
||||
public PacketSyncRecord(PlayerHandlerClient client) {
|
||||
this.client = client;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
if (client == null) {
|
||||
buf.writeShort(-1);
|
||||
return;
|
||||
}
|
||||
buf.writeShort(0);
|
||||
NBTTagCompound tagCompound = new NBTTagCompound();
|
||||
client.writeToNBT(tagCompound);
|
||||
ByteBufUtils.writeTag(buf, tagCompound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
short s = buf.readShort();
|
||||
if (s == -1) {
|
||||
return;
|
||||
}
|
||||
this.client = new PlayerHandlerClient();
|
||||
NBTTagCompound tagCompound = ByteBufUtils.readTag(buf);
|
||||
client.readFromNBT(tagCompound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(PacketSyncRecord message, MessageContext ctx) {
|
||||
if (message.client == null && JustEnoughCalculation.proxy instanceof ProxyServer) {
|
||||
//JustEnoughCalculation.proxy.getPlayerHandler().handleLogin(ctx.getServerHandler().playerEntity.getDisplayNameString());
|
||||
UUID uuida = ctx.getServerHandler().playerEntity.getUniqueID();
|
||||
UUID uuidb = ctx.getServerHandler().playerEntity.getPersistentID();
|
||||
return new PacketSyncRecord(
|
||||
((PlayerHandlerServer) JustEnoughCalculation.proxy.getPlayerHandler()).getClient(uuida));
|
||||
}
|
||||
if (message.client == null && JustEnoughCalculation.proxy instanceof ProxyClient) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
((ProxyClient) JustEnoughCalculation.proxy).setPlayerHandler(message.client);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.BreakIterator;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.*;
|
||||
@@ -112,16 +113,9 @@ public class Utilities {
|
||||
}
|
||||
|
||||
public static String translate(String unlocalized, Object... args) {
|
||||
String localized = getLocalizedString(unlocalized);
|
||||
return String.format(localized, args);
|
||||
return net.minecraft.client.resources.I18n.format(unlocalized, args);
|
||||
}
|
||||
|
||||
private static String getLocalizedString(String unlocalized) {
|
||||
// TODO Implement
|
||||
return unlocalized;
|
||||
}
|
||||
|
||||
|
||||
public static class Relation<K, V> {
|
||||
public HashMap<Pair<K, K>, V> data = new HashMap<>();
|
||||
|
||||
@@ -227,6 +221,7 @@ public class Utilities {
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static class I18n {
|
||||
public static boolean contains(String s1, String s2) {
|
||||
@@ -392,7 +387,7 @@ public class Utilities {
|
||||
FileOutputStream fos = null;
|
||||
try {
|
||||
fos = new FileOutputStream(f);
|
||||
fos.write(write(nbt).getBytes(Charset.forName("UTF-8")));
|
||||
fos.write(write(nbt).getBytes(StandardCharsets.UTF_8));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
@@ -421,6 +416,7 @@ public class Utilities {
|
||||
w.sb.append('{');
|
||||
if (wrap)
|
||||
w.indent++;
|
||||
//noinspection unchecked
|
||||
for (String i : (Set<String>) tags.func_150296_c()) {
|
||||
if (first)
|
||||
first = false;
|
||||
|
||||
@@ -16,4 +16,12 @@ gui.recipeEditor.save=Save
|
||||
gui.recipeEditor.clear=Clear
|
||||
gui.recipeViewer.edit=Edit
|
||||
gui.recipeViewer.delete=Delete
|
||||
item.item_calculator.name=Calculator
|
||||
item.itemCalculator.name=Calculator
|
||||
|
||||
gui.editor.output=Output
|
||||
gui.editor.catalyst=Cata-\nlyst
|
||||
gui.editor.input=Input
|
||||
gui.editor.newGroup=New Group
|
||||
gui.editor.save=Save
|
||||
gui.editor.clear=Clear
|
||||
gui.editor.help=Help
|
||||
@@ -16,4 +16,5 @@ gui.recipeEditor.save=储存
|
||||
gui.recipeEditor.clear=清除
|
||||
gui.recipeViewer.edit=编辑
|
||||
gui.recipeViewer.delete=删除
|
||||
item.item_calculator.name=合成计算器
|
||||
item.itemCalculator.name=合成计算器
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"parent": "builtin/generated",
|
||||
"textures": {
|
||||
"layer0": "jecalculation:items/item_calculator"
|
||||
"layer0": "jecalculation:items/itemCalculator"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
File renamed without changes.
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Reference in new issue
Block a user