Chore: rename itemCalculator to item_calculator

This commit is contained in:
Discreater committed 2021-03-01 16:21:43 +08:00
1 parent 2989787c86
commit 11d6c296d7
12 files changed
+567 -435

No files matched your search

@@ -1,7 +1,5 @@
package me.towdium.jecalculation;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import me.towdium.jecalculation.JustEnoughCalculation;
import me.towdium.jecalculation.gui.GuiHandler;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
@@ -16,11 +14,14 @@ import net.minecraft.world.World;
public class JecaItem extends Item {
public static JecaItem INSTANCE = new JecaItem();
public static final String NAME = "item_calculator";
public JecaItem() {
setHasSubtypes(true);
setMaxStackSize(1);
setUnlocalizedName(NAME);
setTextureName(JustEnoughCalculation.Reference.MODID + ":" + NAME);
setCreativeTab(CreativeTabs.tabTools);
setUnlocalizedName("item_calculator");
}
@Override
@@ -7,6 +7,7 @@ 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.network.IProxy;
@@ -43,9 +44,6 @@ public class JustEnoughCalculation {
public static SimpleNetworkWrapper network;
public static Logger logger = LogManager.getLogger(Reference.MODID);
public static Item itemCalculator = new JecaItem().setUnlocalizedName("itemCalculator")
.setTextureName(Reference.MODID + ":" + "itemCalculator");
@NetworkCheckHandler
public static boolean networkCheck(Map<String, String> mods, Side s) {
return s == Side.SERVER || mods.containsKey(Reference.MODID);
@@ -54,7 +52,7 @@ public class JustEnoughCalculation {
@Mod.EventHandler
public static void initPre(FMLPreInitializationEvent event) {
JecaConfig.preInit(event);
GameRegistry.registerItem(itemCalculator, itemCalculator.getUnlocalizedName().substring(5));
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);
@@ -68,8 +66,8 @@ public class JustEnoughCalculation {
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().
register(itemCalculator, 0, new ModelResourceLocation(Reference.MODID + ":" + itemCalculator.getUnlocalizedName().substring(5), "inventory"));
}*/
ShapedOreRecipe recipe = new ShapedOreRecipe(new ItemStack(itemCalculator), "SIS", "SRS", "SOS", 'S', "stone",
'I', "dyeBlack", 'R', "dustRedstone", 'O', "ingotIron") {
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");
@@ -1,4 +1,4 @@
package me.towdium.jecalculation.plugin;
package me.towdium.jecalculation.nei;
import codechicken.nei.PositionedStack;
import codechicken.nei.api.IOverlayHandler;
@@ -1,4 +1,4 @@
package me.towdium.jecalculation.plugin;
package me.towdium.jecalculation.nei;
import codechicken.nei.api.API;
import codechicken.nei.api.IConfigureNEI;
@@ -1,421 +1,480 @@
//package me.towdium.jecalculation.utils;
//
//import me.towdium.jecalculation.JustEnoughCalculation;
//import me.towdium.jecalculation.utils.wrappers.Pair;
//import net.minecraft.client.Minecraft;
//import net.minecraft.client.gui.FontRenderer;
//import net.minecraft.item.Item;
//import net.minecraft.item.ItemStack;
//import net.minecraft.nbt.*;
//import net.minecraft.util.ResourceLocation;
//import net.minecraftforge.client.MinecraftForgeClient;
//import net.minecraftforge.fluids.Fluid;
//import net.minecraftforge.fml.common.Loader;
//import net.minecraftforge.fml.relauncher.Side;
//import net.minecraftforge.fml.relauncher.SideOnly;
//import org.apache.commons.io.FileUtils;
//import org.apache.commons.lang3.StringEscapeUtils;
//
//import javax.annotation.Nullable;
//import javax.annotation.ParametersAreNonnullByDefault;
//import java.io.File;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.nio.charset.Charset;
//import java.text.BreakIterator;
//import java.text.DecimalFormat;
//import java.util.*;
//import java.util.function.BiFunction;
//import java.util.function.BiPredicate;
//import java.util.function.Function;
//import java.util.function.Supplier;
//import java.util.stream.Stream;
//import java.util.stream.StreamSupport;
//
//import static net.minecraft.client.resources.I18n.format;
//
///**
// * Author: Towdium
// * Date: 2016/6/25.
// */
//@SuppressWarnings("UnusedReturnValue")
//@ParametersAreNonnullByDefault
//public class Utilities {
// // FLOAT FORMATTING
// public static char[] suffix = new char[]{'K', 'M', 'B', 'G', 'T', 'P'};
// public static DecimalFormat[] format = new DecimalFormat[]{
// new DecimalFormat("#."), new DecimalFormat("#.#"), new DecimalFormat("#.##"),
// new DecimalFormat("#.###"), new DecimalFormat("#.####")
// };
//
// public static String cutNumber(float f, int size) {
// BiFunction<Float, Integer, String> form = (fl, len) -> format[len - 1 - (int) Math.log10(fl)].format(fl);
// int scale = (int) Math.log10(f) / 3;
// if (scale == 0) return form.apply(f, size);
// else return form.apply(f / (float) Math.pow(1000, scale), size - 1) + suffix[scale - 1];
// }
//
// @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
// public static <T> Stream<T> stream(Optional<T> o) {
// return o.map(Stream::of).orElse(Stream.empty());
// }
//
// public static <T> Supplier<T> fake(Runnable r) {
// return () -> {
// r.run();
// return null;
// };
// }
//
// public static String repeat(String s, int n) {
// StringBuilder sb = new StringBuilder();
// for (int i = 0; i < n; i++) sb.append(s);
// return sb.toString();
// }
//
// // MOD NAME
// @Nullable
// public static String getModName(Item item) {
// ResourceLocation tmp = item.getRegistryName();
// if (tmp == null) return null;
// String id = tmp.getNamespace();
// return id.equals("minecraft") ? "Minecraft" : Loader.instance().getIndexedModList().get(id).getName();
// }
//
// public static String getModName(Fluid fluid) {
// String name = fluid.getName();
// if (name.equals("lava") || name.equals("water")) return "Minecraft";
// else return Loader.instance().getIndexedModList().get(fluid.getStill().getNamespace()).getName();
// }
//
// public static NBTTagCompound getTag(ItemStack is) {
// NBTTagCompound tagCompound = is.getTagCompound();
// if (tagCompound == null) {
// tagCompound = new NBTTagCompound();
// is.setTagCompound(tagCompound);
// }
// return tagCompound;
// // TODO check return is.getOrCreateSubCompound(JustEnoughCalculation.Reference.MODID);
// }
//
// public static class Relation<K, V> {
// public HashMap<Pair<K, K>, V> data = new HashMap<>();
//
// public void put(K a, K b, V v) {
// Pair<K, K> pair = new Pair<>(a, b);
// V tmp = data.get(pair);
// data.put(tmp == null ? new Pair<>(b, a) : pair, v);
// }
//
// @Nullable
// public V get(K a, K b) {
// V ret = data.get(new Pair<>(a, b));
// if (ret == null) ret = data.get(new Pair<>(b, a));
// return ret;
// }
// }
//
// public static class Timer {
// long time = System.currentTimeMillis();
// boolean running = false;
//
// public void setState(boolean b) {
// if (!b && running) running = false;
// if (b && !running) {
// running = true;
// time = System.currentTimeMillis();
// }
// }
//
// public long getTime() {
// return running ? System.currentTimeMillis() - time : 0;
// }
// }
//
// @SuppressWarnings("UnusedReturnValue")
// public static class Circulator {
// int total, current;
//
// public Circulator(int total) {
// this(total, 0);
// }
//
// public Circulator(int total, int current) {
// this.total = total;
// this.current = current;
// }
//
// public int next() {
// return current + 1 == total ? 0 : current + 1;
// }
//
// public int prev() {
// return current == 0 ? total - 1 : current - 1;
// }
//
// public Circulator move(int steps) {
// current += steps;
// if (current < 0) current += (-current) / total * total + total;
// else current = current % total;
// return this;
// }
//
// public int current() {
// return current;
// }
//
// public Circulator set(int index) {
// if (index >= 0 && index < total) current = index;
// else throw new RuntimeException(String.format("Expected: [0, %d), given: %d.", total, index));
// return this;
// }
//
// public Circulator copy() {
// return new Circulator(total).set(current);
// }
// }
//
// public static class ReversedIterator<T> implements Iterator<T> {
// ListIterator<T> i;
//
// public ReversedIterator(List<T> l) {
// i = l.listIterator(l.size());
// }
//
// @Override
// public boolean hasNext() {
// return i.hasPrevious();
// }
//
// @Override
// public T next() {
// return i.previous();
// }
//
// public Stream<T> stream() {
// return StreamSupport.stream(Spliterators.spliteratorUnknownSize(this, Spliterator.ORDERED), false);
// }
// }
//
// @SideOnly(Side.CLIENT)
// public static class I18n {
// public static boolean contains(String s1, String s2) {
// return s1.contains(s2);
// }
//
// public static Pair<String, Boolean> search(String translateKey, Object... parameters) {
// Pair<String, Boolean> ret = new Pair<>(null, null);
// translateKey = "jecalculation." + translateKey;
// String buffer = format(translateKey, parameters);
// ret.two = !buffer.equals(translateKey);
// buffer = StringEscapeUtils.unescapeJava(buffer);
// ret.one = buffer.replace("\t", " ");
// return ret;
// }
//
// public static String get(String translateKey, Object... parameters) {
// return search(translateKey, parameters).one;
// }
//
// public static List<String> wrap(String s, int width) {
// return new TextWrapper().wrap(s, MinecraftForgeClient.getLocale(),
// i -> TextWrapper.renderer.getCharWidth(i), width);
// }
//
// static class TextWrapper {
// static FontRenderer renderer = Minecraft.getMinecraft().fontRenderer;
//
// String str;
// BreakIterator it;
// List<String> temp = new ArrayList<>();
// Function<Character, Integer> func;
// int start, end, section, space, cursor, width;
//
// private void cut() {
// char c = str.charAt(cursor);
// if (c == '\f') cursor++;
// temp.add(str.substring(start, cursor));
// if (c == ' ' || c == ' ' || c == '\n') cursor++;
// start = cursor;
// end = cursor;
// space = width;
// section = func.apply(str.charAt(cursor));
// }
//
// private void move() {
// temp.add(str.substring(start, end));
// start = end;
// space = width;
// }
//
// private List<String> wrap(String s, Locale l, Function<Character, Integer> func, int width) {
// temp.clear();
// start = 0;
// end = 0;
// cursor = 0;
// space = width;
// str = s;
// it = BreakIterator.getLineInstance(l);
// it.setText(s);
// this.width = width;
// this.func = func;
// for (int i = it.next(); i != BreakIterator.DONE; i = it.next()) {
// for (cursor = end; cursor < i; cursor++) {
// char ch = str.charAt(cursor);
// section += func.apply(str.charAt(cursor));
// if (ch == '\n' || ch == '\f') cut();
// else if (section > space) {
// if (start == end) cut();
// else move();
// }
// }
// space -= section;
// section = 0;
// end = cursor;
// }
// move();
// return temp;
// }
// }
// }
//
// public static class Recent<T> {
// LinkedList<T> data = new LinkedList<>();
// BiPredicate<T, T> tester;
// int limit;
//
// public Recent(BiPredicate<T, T> tester, int limit) {
// this.tester = tester;
// this.limit = limit;
// }
//
// public Recent(int limit) {
// this.limit = limit;
// }
//
// public boolean push(T obj, boolean replace) {
// if (replace) data.pop();
// boolean ret = data.removeIf(t -> tester != null ? tester.test(t, obj) : t.equals(obj));
// data.addFirst(obj);
// if (data.size() > limit) data.removeLast();
// return ret;
// }
//
// public List<T> toList() {
// //noinspection unchecked
// return (List<T>) data.clone();
// }
//
// public void clear() {
// data.clear();
// }
//
// public int size() {
// return data.size();
// }
// }
//
// public static class Json {
// @Nullable
// public static NBTTagCompound read(File f) {
// try {
// String s = FileUtils.readFileToString(f, "UTF-8");
// return read(s);
// } catch (IOException e) {
// return null;
// }
// }
//
// @Nullable
// public static NBTTagCompound read(String s) {
// try {
// return JsonToNBT.getTagFromJson(s);
// } catch (NBTException e) {
// e.printStackTrace();
// return null;
// }
// }
//
// public static void write(NBTTagCompound nbt, File f) {
// FileOutputStream fos = null;
// try {
// fos = new FileOutputStream(f);
// fos.write(write(nbt).getBytes(Charset.forName("UTF-8")));
// } catch (IOException e) {
// e.printStackTrace();
// } finally {
// if (fos != null) {
// try {
// fos.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
// }
//
// public static String write(NBTTagCompound nbt) {
// Writer w = new Writer();
// write(nbt, w);
// w.enter();
// return w.build();
// }
//
// private static void write(NBTBase nbt, Writer w) {
// if (nbt instanceof NBTTagCompound) {
// NBTTagCompound tags = (NBTTagCompound) nbt;
// boolean wrap = tags.getKeySet().size() > 1;
// boolean first = true;
// w.sb.append('{');
// if (wrap) w.indent++;
// for (String i : tags.getKeySet()) {
// if (first) first = false;
// else w.sb.append(',');
// if (wrap) w.enter();
// w.sb.append('"');
// w.sb.append(i);
// w.sb.append("\": ");
// write(tags.getTag(i), w);
// }
// if (wrap) {
// w.indent--;
// w.enter();
// }
// w.sb.append('}');
// } else if (nbt instanceof NBTTagList) {
// NBTTagList tags = (NBTTagList) nbt;
// boolean wrap = tags.tagCount() > 1;
// boolean first = true;
// w.sb.append('[');
// if (wrap) w.indent++;
// for (NBTBase i : tags) {
// if (first) first = false;
// else w.sb.append(',');
// if (wrap) w.enter();
// write(i, w);
// }
// if (wrap) {
// w.indent--;
// w.enter();
// }
// w.sb.append(']');
// } else w.sb.append(nbt.toString());
// }
//
// private static class Writer {
// public int indent = 0;
// StringBuilder sb = new StringBuilder();
//
// public void enter() {
// sb.append('\n');
// char[] tmp = new char[4 * indent];
// Arrays.fill(tmp, ' ');
// sb.append(tmp);
// }
//
// public String build() {
// return sb.toString();
// }
// }
// }
//}
package me.towdium.jecalculation.utils;
import cpw.mods.fml.common.registry.GameData;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import me.towdium.jecalculation.JecaItem;
import me.towdium.jecalculation.JustEnoughCalculation;
import me.towdium.jecalculation.utils.wrappers.Pair;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.resources.Language;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.*;
import net.minecraftforge.fluids.Fluid;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.text.BreakIterator;
import java.text.DecimalFormat;
import java.util.*;
import java.util.function.BiFunction;
import java.util.function.BiPredicate;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import static net.minecraft.client.resources.I18n.format;
/**
* Author: Towdium
* Date: 2016/6/25.
*/
@SuppressWarnings("UnusedReturnValue")
@ParametersAreNonnullByDefault
public class Utilities {
// FLOAT FORMATTING
public static char[] suffix = new char[]{'K', 'M', 'B', 'G', 'T', 'P'};
public static DecimalFormat[] format = new DecimalFormat[]{new DecimalFormat("#."),
new DecimalFormat("#.#"),
new DecimalFormat("#.##"),
new DecimalFormat("#.###"),
new DecimalFormat("#.####")};
public static String cutNumber(float f, int size) {
BiFunction<Float, Integer, String> form = (fl, len) -> format[len - 1 - (int) Math.log10(fl)].format(fl);
int scale = (int) Math.log10(f) / 3;
if (scale == 0)
return form.apply(f, size);
else
return form.apply(f / (float) Math.pow(1000, scale), size - 1) + suffix[scale - 1];
}
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
public static <T> Stream<T> stream(Optional<T> o) {
return o.map(Stream::of).orElse(Stream.empty());
}
public static <T> Supplier<T> fake(Runnable r) {
return () -> {
r.run();
return null;
};
}
public static String repeat(String s, int n) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++)
sb.append(s);
return sb.toString();
}
// MOD NAME
@Nullable
public static String getModName(Item item) {
String name = GameData.getItemRegistry().getNameForObject(item);
JustEnoughCalculation.logger.warn(String.format("item name: %s", name));
// TODO check
return name;
// ResourceLocation tmp = item.getRegistryName();
// if (tmp == null) return null;
// String id = tmp.getNamespace();
// return id.equals("minecraft") ? "Minecraft" : Loader.instance().getIndexedModList().get(id).getName();
}
public static String getModName(Fluid fluid) {
String name = GameData.getItemRegistry().getNameForObject(fluid);
JustEnoughCalculation.logger.warn(String.format("fluid name: %s", fluid));
// TODO check
return name;
}
public static NBTTagCompound getTag(ItemStack is) {
NBTTagCompound tagCompound = is.getTagCompound();
if (tagCompound == null) {
tagCompound = new NBTTagCompound();
is.setTagCompound(tagCompound);
}
return tagCompound;
// TODO check return is.getOrCreateSubCompound(JustEnoughCalculation.Reference.MODID);
}
public static String translate(String unlocalized, Object... args) {
String localized = getLocalizedString(unlocalized);
return String.format(localized, 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<>();
public void put(K a, K b, V v) {
Pair<K, K> pair = new Pair<>(a, b);
V tmp = data.get(pair);
data.put(tmp == null ? new Pair<>(b, a) : pair, v);
}
@Nullable
public V get(K a, K b) {
V ret = data.get(new Pair<>(a, b));
if (ret == null)
ret = data.get(new Pair<>(b, a));
return ret;
}
}
public static class Timer {
long time = System.currentTimeMillis();
boolean running = false;
public void setState(boolean b) {
if (!b && running)
running = false;
if (b && !running) {
running = true;
time = System.currentTimeMillis();
}
}
public long getTime() {
return running ? System.currentTimeMillis() - time : 0;
}
}
@SuppressWarnings("UnusedReturnValue")
public static class Circulator {
int total, current;
public Circulator(int total) {
this(total, 0);
}
public Circulator(int total, int current) {
this.total = total;
this.current = current;
}
public int next() {
return current + 1 == total ? 0 : current + 1;
}
public int prev() {
return current == 0 ? total - 1 : current - 1;
}
public Circulator move(int steps) {
current += steps;
if (current < 0)
current += (-current) / total * total + total;
else
current = current % total;
return this;
}
public int current() {
return current;
}
public Circulator set(int index) {
if (index >= 0 && index < total)
current = index;
else
throw new RuntimeException(String.format("Expected: [0, %d), given: %d.", total, index));
return this;
}
public Circulator copy() {
return new Circulator(total).set(current);
}
}
public static class ReversedIterator<T> implements Iterator<T> {
ListIterator<T> i;
public ReversedIterator(List<T> l) {
i = l.listIterator(l.size());
}
@Override
public boolean hasNext() {
return i.hasPrevious();
}
@Override
public T next() {
return i.previous();
}
public Stream<T> stream() {
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(this, Spliterator.ORDERED), false);
}
}
@SideOnly(Side.CLIENT)
public static class I18n {
public static boolean contains(String s1, String s2) {
return s1.contains(s2);
}
public static Pair<String, Boolean> search(String translateKey, Object... parameters) {
Pair<String, Boolean> ret = new Pair<>(null, null);
translateKey = "jecalculation." + translateKey;
String buffer = format(translateKey, parameters);
ret.two = !buffer.equals(translateKey);
buffer = StringEscapeUtils.unescapeJava(buffer);
ret.one = buffer.replace("\t", " ");
return ret;
}
public static String get(String translateKey, Object... parameters) {
return search(translateKey, parameters).one;
}
public static List<String> wrap(String s, int width) {
return new TextWrapper().wrap(s, getLocale(), i -> TextWrapper.renderer.getCharWidth(i), width);
}
/**
* Copy from `net.minecraft.client.resources.Language()` 1.12.2
*
* @return Locale
*/
public static Locale getLocale() {
Language language = Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage();
String languageCode = language.getLanguageCode();
String[] splitLangCode = languageCode.split("_", 2);
if (splitLangCode.length == 1) { // Vanilla has some languages without underscores
return new Locale(languageCode);
} else {
return new Locale(splitLangCode[0], splitLangCode[1]);
}
}
static class TextWrapper {
static FontRenderer renderer = Minecraft.getMinecraft().fontRenderer;
String str;
BreakIterator it;
List<String> temp = new ArrayList<>();
Function<Character, Integer> func;
int start, end, section, space, cursor, width;
private void cut() {
char c = str.charAt(cursor);
if (c == '\f')
cursor++;
temp.add(str.substring(start, cursor));
if (c == ' ' || c == ' ' || c == '\n')
cursor++;
start = cursor;
end = cursor;
space = width;
section = func.apply(str.charAt(cursor));
}
private void move() {
temp.add(str.substring(start, end));
start = end;
space = width;
}
private List<String> wrap(String s, Locale l, Function<Character, Integer> func, int width) {
temp.clear();
start = 0;
end = 0;
cursor = 0;
space = width;
str = s;
it = BreakIterator.getLineInstance(l);
it.setText(s);
this.width = width;
this.func = func;
for (int i = it.next(); i != BreakIterator.DONE; i = it.next()) {
for (cursor = end; cursor < i; cursor++) {
char ch = str.charAt(cursor);
section += func.apply(str.charAt(cursor));
if (ch == '\n' || ch == '\f')
cut();
else if (section > space) {
if (start == end)
cut();
else
move();
}
}
space -= section;
section = 0;
end = cursor;
}
move();
return temp;
}
}
}
public static class Recent<T> {
LinkedList<T> data = new LinkedList<>();
BiPredicate<T, T> tester;
int limit;
public Recent(BiPredicate<T, T> tester, int limit) {
this.tester = tester;
this.limit = limit;
}
public Recent(int limit) {
this.limit = limit;
}
public boolean push(T obj, boolean replace) {
if (replace)
data.pop();
boolean ret = data.removeIf(t -> tester != null ? tester.test(t, obj) : t.equals(obj));
data.addFirst(obj);
if (data.size() > limit)
data.removeLast();
return ret;
}
public List<T> toList() {
//noinspection unchecked
return (List<T>) data.clone();
}
public void clear() {
data.clear();
}
public int size() {
return data.size();
}
}
public static class Json {
@Nullable
public static NBTTagCompound read(File f) {
try {
String s = FileUtils.readFileToString(f, "UTF-8");
return read(s);
} catch (IOException e) {
return null;
}
}
@Nullable
public static NBTTagCompound read(String s) {
try {
return (NBTTagCompound) JsonToNBT.func_150315_a(s);
} catch (NBTException e) {
e.printStackTrace();
return null;
}
}
public static void write(NBTTagCompound nbt, File f) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(f);
fos.write(write(nbt).getBytes(Charset.forName("UTF-8")));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static String write(NBTTagCompound nbt) {
Writer w = new Writer();
write(nbt, w);
w.enter();
return w.build();
}
private static void write(NBTBase nbt, Writer w) {
if (nbt instanceof NBTTagCompound) {
NBTTagCompound tags = (NBTTagCompound) nbt;
boolean wrap = tags.func_150296_c().size() > 1;
boolean first = true;
w.sb.append('{');
if (wrap)
w.indent++;
for (String i : (Set<String>) tags.func_150296_c()) {
if (first)
first = false;
else
w.sb.append(',');
if (wrap)
w.enter();
w.sb.append('"');
w.sb.append(i);
w.sb.append("\": ");
write(tags.getTag(i), w);
}
if (wrap) {
w.indent--;
w.enter();
}
w.sb.append('}');
} else if (nbt instanceof NBTTagList) {
JustEnoughCalculation.logger.error("nbt is TagList");
// TODO
// NBTTagList tags = (NBTTagList) nbt;
// boolean wrap = tags.tagCount() > 1;
// boolean first = true;
// w.sb.append('[');
// if (wrap) w.indent++;
// for (NBTBase i : tags) {
// if (first) first = false;
// else w.sb.append(',');
// if (wrap) w.enter();
// write(i, w);
// }
// if (wrap) {
// w.indent--;
// w.enter();
// }
// w.sb.append(']');
} else
w.sb.append(nbt.toString());
}
private static class Writer {
public int indent = 0;
StringBuilder sb = new StringBuilder();
public void enter() {
sb.append('\n');
char[] tmp = new char[4 * indent];
Arrays.fill(tmp, ' ');
sb.append(tmp);
}
public String build() {
return sb.toString();
}
}
}
}
@@ -0,0 +1,30 @@
package me.towdium.jecalculation.utils.polyfill;
import cpw.mods.fml.relauncher.Side;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Event {
/**
* A class which will be subscribed to {@link net.minecraftforge.common.MinecraftForge.EVENT_BUS} at mod construction time.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface EventBusSubscriber {
Side[] value() default {Side.CLIENT, Side.SERVER};
/**
* Optional value, only nessasary if tis annotation is not on the same class that has a @Mod annotation.
* Needed to prevent early classloading of classes not owned by your mod.
*
* @return mod id
*/
String modid() default "";
}
}
@@ -0,0 +1,43 @@
package me.towdium.jecalculation.utils.polyfill;
import cpw.mods.fml.common.eventhandler.EventBus;
import me.towdium.jecalculation.JustEnoughCalculation;
import net.minecraftforge.common.MinecraftForge;
import org.reflections.Reflections;
import org.reflections.scanners.ResourcesScanner;
import org.reflections.scanners.SubTypesScanner;
import org.reflections.util.ClasspathHelper;
import org.reflections.util.ConfigurationBuilder;
import org.reflections.util.FilterBuilder;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
public class Loader {
public static void subscribeToEventBus() {
Set<Class<?>> classes = getAllClasses("me.towdium.jecalculation");
classes.stream().filter((cls) -> cls.isAnnotationPresent(Event.EventBusSubscriber.class)).forEach((cls) -> {
JustEnoughCalculation.logger.info("loading class" + cls.getName());
try {
MinecraftForge.EVENT_BUS.register(cls.newInstance());
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
});
}
private static Set<Class<?>> getAllClasses(String packageName) {
List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());
Reflections reflections = new Reflections(new ConfigurationBuilder().setScanners(
new SubTypesScanner(false /* don't exclude Object.class */), new ResourcesScanner()).setUrls(
ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0]))).filterInputsBy(
new FilterBuilder().include(FilterBuilder.prefix(packageName))));
return reflections.getSubTypesOf(Object.class);
}
}