aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/xmod/thaumcraft
diff options
context:
space:
mode:
authorAlkalus <3060479+draknyte1@users.noreply.github.com>2018-05-25 12:16:57 +1000
committerAlkalus <3060479+draknyte1@users.noreply.github.com>2018-05-25 12:16:57 +1000
commit2b73e75c4de865c05c5cb48bc9e91b1754a37c0c (patch)
tree99bb61b1857500a3d313417fd948acc7ce4cedd4 /src/Java/gtPlusPlus/xmod/thaumcraft
parent83a72ed129bafdf25ab87e45521a1a22a3afc23e (diff)
downloadGT5-Unofficial-2b73e75c4de865c05c5cb48bc9e91b1754a37c0c.tar.gz
GT5-Unofficial-2b73e75c4de865c05c5cb48bc9e91b1754a37c0c.tar.bz2
GT5-Unofficial-2b73e75c4de865c05c5cb48bc9e91b1754a37c0c.zip
+ Added a WeakRef type Automap.
+ Added getClassByName(String) to ReflectionUtils.java. + Added lots of handlers to ThaumcraftUtils.java. $ Improved Fake Player handling to only now be held by weak references. Should prevent worlds staying loaded.
Diffstat (limited to 'src/Java/gtPlusPlus/xmod/thaumcraft')
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java12
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/objects/ResearchNoteDataWrapper.java25
-rw-r--r--src/Java/gtPlusPlus/xmod/thaumcraft/util/ThaumcraftUtils.java280
3 files changed, 217 insertions, 100 deletions
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java b/src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java
index 77a9054c8f..06ae8a48bb 100644
--- a/src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/HANDLER_Thaumcraft.java
@@ -3,6 +3,8 @@ package gtPlusPlus.xmod.thaumcraft;
import java.util.Arrays;
import java.util.List;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import gregtech.api.enums.GT_Values;
@@ -13,12 +15,14 @@ import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.lib.LoadedMods;
+import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.xmod.thaumcraft.aspect.GTPP_Aspects.TC_AspectStack_Ex;
import gtPlusPlus.xmod.thaumcraft.util.ThaumcraftUtils;
public class HANDLER_Thaumcraft {
public static IThaumcraftCompat sThaumcraftCompat;
+ public static Item mResearchNotes;
public static final AutoMap<Pair<ItemStack, TC_AspectStack_Ex[]>> sItemsToGetAspects = new AutoMap<Pair<ItemStack, TC_AspectStack_Ex[]>>();
static {
@@ -32,7 +36,13 @@ public class HANDLER_Thaumcraft {
public static void init(){
if (LoadedMods.Thaumcraft){
-
+ try {
+ mResearchNotes = (Item) ReflectionUtils.getField(Class.forName("thaumcraft.common.config.ConfigItems"), "itemResearchNotes").get(null);
+ }
+ catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException
+ | ClassNotFoundException e) {
+ mResearchNotes = Items.paper;
+ }
}
}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ResearchNoteDataWrapper.java b/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ResearchNoteDataWrapper.java
new file mode 100644
index 0000000000..7ca5c117f0
--- /dev/null
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/objects/ResearchNoteDataWrapper.java
@@ -0,0 +1,25 @@
+package gtPlusPlus.xmod.thaumcraft.objects;
+
+import thaumcraft.common.lib.research.ResearchNoteData;
+
+public class ResearchNoteDataWrapper extends ResearchNoteData {
+
+ public ResearchNoteDataWrapper() {
+ super();
+ }
+
+ public ResearchNoteDataWrapper(ResearchNoteData data) {
+ key = data.key;
+ color = data.color;
+ hexEntries = data.hexEntries;
+ hexes = data.hexes;
+ complete = data.complete;
+ copies = data.copies;
+ }
+
+ public void completeResearch() {
+ this.complete = true;
+ }
+
+
+}
diff --git a/src/Java/gtPlusPlus/xmod/thaumcraft/util/ThaumcraftUtils.java b/src/Java/gtPlusPlus/xmod/thaumcraft/util/ThaumcraftUtils.java
index 87cad3614b..399604b93b 100644
--- a/src/Java/gtPlusPlus/xmod/thaumcraft/util/ThaumcraftUtils.java
+++ b/src/Java/gtPlusPlus/xmod/thaumcraft/util/ThaumcraftUtils.java
@@ -6,8 +6,11 @@ import static gtPlusPlus.xmod.thaumcraft.aspect.GTPP_AspectCompat.getAspectList_
import java.util.*;
import net.minecraft.block.Block;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
+import net.minecraft.world.World;
import gregtech.api.GregTech_API;
import gregtech.api.enums.ConfigCategories;
@@ -17,30 +20,38 @@ import gregtech.api.util.GT_Utility;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.Pair;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.xmod.thaumcraft.HANDLER_Thaumcraft;
import gtPlusPlus.xmod.thaumcraft.aspect.GTPP_Aspects;
import gtPlusPlus.xmod.thaumcraft.aspect.GTPP_Aspects.TC_AspectStack_Ex;
+import gtPlusPlus.xmod.thaumcraft.objects.ResearchNoteDataWrapper;
import thaumcraft.api.ThaumcraftApi;
import thaumcraft.api.ThaumcraftApiHelper;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;
import thaumcraft.api.crafting.*;
import thaumcraft.api.research.*;
+import thaumcraft.common.Thaumcraft;
+import thaumcraft.common.items.ItemResearchNotes;
+import thaumcraft.common.lib.research.ResearchManager;
+import thaumcraft.common.lib.research.ResearchNoteData;
+import thaumcraft.common.lib.utils.HexUtils;
public class ThaumcraftUtils {
public static boolean addAspectToItem(ItemStack item, Aspect aspect, int amount) {
return addAspectToItem(item, getEnumAspect(aspect.getName()), amount);
}
-
+
/*public static boolean addAspectToItem(ItemStack item, Aspect[] aspects, int amount) {
return addAspectToItem(item, getEnumAspect(aspect.getName()), amount);
}*/
-
+
public static boolean addAspectToItem(ItemStack item, GTPP_Aspects aspect, int amount) {
return addAspectToItem(item, new GTPP_Aspects[] {aspect}, new Integer[] {amount});
-
+
}
-
+
public static boolean addAspectToItem(ItemStack item, GTPP_Aspects[] aspect, Integer[] amounts) {
TC_AspectStack_Ex[] aspects = new TC_AspectStack_Ex[aspect.length];
for (int g=0;g<aspect.length;g++) {
@@ -59,18 +70,18 @@ public class ThaumcraftUtils {
//Logger.INFO("[Aspect] ");
return false;
}
-
-
+
+
public static Aspect getAspect(String name) {
GTPP_Aspects r = getAspectEnum(name);
return (r == null ? null : r.mAspect);
}
-
+
public static GTPP_Aspects getEnumAspect(String name) {
GTPP_Aspects r = getAspectEnum(name);
return (r == null ? null : r);
}
-
+
private static GTPP_Aspects getAspectEnum(String name) {
GTPP_Aspects h = null;
for (GTPP_Aspects f : GTPP_Aspects.values()) {
@@ -80,82 +91,82 @@ public class ThaumcraftUtils {
}
return h;
}
-
+
public static Object addResearch(String aResearch, String aName, String aText, String[] aParentResearches, String aCategory, ItemStack aIcon, int aComplexity, int aType, int aX, int aY, List<TC_AspectStack_Ex> aAspects, ItemStack[] aResearchTriggers, Object[] aPages) {
- if (!GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.researches, aResearch, true)) {
- return null;
- }
- ResearchCategoryList tCategory = ResearchCategories.getResearchList(aCategory);
- if (tCategory == null) {
- return null;
- }
- for (Iterator<ResearchItem> i$ = tCategory.research.values().iterator(); i$.hasNext(); ) {
- ResearchItem tResearch = (ResearchItem) i$.next();
- if ((tResearch.displayColumn == aX) && (tResearch.displayRow == aY)) {
- aX += (aX > 0 ? 5 : -5);
- aY += (aY > 0 ? 5 : -5);
- }
- }
- ResearchItem rResearch = new ResearchItem(aResearch, aCategory, getAspectList_Ex(aAspects), aX, aY, aComplexity, aIcon);
- ArrayList<ResearchPage> tPages = new ArrayList<ResearchPage>(aPages.length);
- GT_LanguageManager.addStringLocalization("tc.research_name." + aResearch, aName);
- GT_LanguageManager.addStringLocalization("tc.research_text." + aResearch, "[GT++] " + aText);
- for (Object tPage : aPages) {
- if ((tPage instanceof String)) {
- tPages.add(new ResearchPage((String) tPage));
- } else if ((tPage instanceof IRecipe)) {
- tPages.add(new ResearchPage((IRecipe) tPage));
- } else if ((tPage instanceof IArcaneRecipe)) {
- tPages.add(new ResearchPage((IArcaneRecipe) tPage));
- } else if ((tPage instanceof CrucibleRecipe)) {
- tPages.add(new ResearchPage((CrucibleRecipe) tPage));
- } else if ((tPage instanceof InfusionRecipe)) {
- tPages.add(new ResearchPage((InfusionRecipe) tPage));
- } else if ((tPage instanceof InfusionEnchantmentRecipe)) {
- tPages.add(new ResearchPage((InfusionEnchantmentRecipe) tPage));
- }
- }
- if ((aType & 0x40) != 0) {
- rResearch.setAutoUnlock();
- }
- if ((aType & 0x1) != 0) {
- rResearch.setSecondary();
- }
- if ((aType & 0x20) != 0) {
- rResearch.setSpecial();
- }
- if ((aType & 0x8) != 0) {
- rResearch.setVirtual();
- }
- if ((aType & 0x4) != 0) {
- rResearch.setHidden();
- }
- if ((aType & 0x10) != 0) {
- rResearch.setRound();
- }
- if ((aType & 0x2) != 0) {
- rResearch.setStub();
- }
- if (aParentResearches != null) {
- ArrayList<String> tParentResearches = new ArrayList<String>();
- for (String tParent : aParentResearches) {
- if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.researches, aResearch, true)) {
- tParentResearches.add(tParent);
- }
- }
- if (tParentResearches.size() > 0) {
- rResearch.setParents((String[]) tParentResearches.toArray(new String[tParentResearches.size()]));
- rResearch.setConcealed();
- }
- }
- if (aResearchTriggers != null) {
- rResearch.setItemTriggers(aResearchTriggers);
- rResearch.setHidden();
- }
- rResearch.setPages((ResearchPage[]) tPages.toArray(new ResearchPage[tPages.size()]));
- return rResearch.registerResearchItem();
-}
-
+ if (!GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.researches, aResearch, true)) {
+ return null;
+ }
+ ResearchCategoryList tCategory = ResearchCategories.getResearchList(aCategory);
+ if (tCategory == null) {
+ return null;
+ }
+ for (Iterator<ResearchItem> i$ = tCategory.research.values().iterator(); i$.hasNext(); ) {
+ ResearchItem tResearch = (ResearchItem) i$.next();
+ if ((tResearch.displayColumn == aX) && (tResearch.displayRow == aY)) {
+ aX += (aX > 0 ? 5 : -5);
+ aY += (aY > 0 ? 5 : -5);
+ }
+ }
+ ResearchItem rResearch = new ResearchItem(aResearch, aCategory, getAspectList_Ex(aAspects), aX, aY, aComplexity, aIcon);
+ ArrayList<ResearchPage> tPages = new ArrayList<ResearchPage>(aPages.length);
+ GT_LanguageManager.addStringLocalization("tc.research_name." + aResearch, aName);
+ GT_LanguageManager.addStringLocalization("tc.research_text." + aResearch, "[GT++] " + aText);
+ for (Object tPage : aPages) {
+ if ((tPage instanceof String)) {
+ tPages.add(new ResearchPage((String) tPage));
+ } else if ((tPage instanceof IRecipe)) {
+ tPages.add(new ResearchPage((IRecipe) tPage));
+ } else if ((tPage instanceof IArcaneRecipe)) {
+ tPages.add(new ResearchPage((IArcaneRecipe) tPage));
+ } else if ((tPage instanceof CrucibleRecipe)) {
+ tPages.add(new ResearchPage((CrucibleRecipe) tPage));
+ } else if ((tPage instanceof InfusionRecipe)) {
+ tPages.add(new ResearchPage((InfusionRecipe) tPage));
+ } else if ((tPage instanceof InfusionEnchantmentRecipe)) {
+ tPages.add(new ResearchPage((InfusionEnchantmentRecipe) tPage));
+ }
+ }
+ if ((aType & 0x40) != 0) {
+ rResearch.setAutoUnlock();
+ }
+ if ((aType & 0x1) != 0) {
+ rResearch.setSecondary();
+ }
+ if ((aType & 0x20) != 0) {
+ rResearch.setSpecial();
+ }
+ if ((aType & 0x8) != 0) {
+ rResearch.setVirtual();
+ }
+ if ((aType & 0x4) != 0) {
+ rResearch.setHidden();
+ }
+ if ((aType & 0x10) != 0) {
+ rResearch.setRound();
+ }
+ if ((aType & 0x2) != 0) {
+ rResearch.setStub();
+ }
+ if (aParentResearches != null) {
+ ArrayList<String> tParentResearches = new ArrayList<String>();
+ for (String tParent : aParentResearches) {
+ if (GregTech_API.sRecipeFile.get(ConfigCategories.Recipes.researches, aResearch, true)) {
+ tParentResearches.add(tParent);
+ }
+ }
+ if (tParentResearches.size() > 0) {
+ rResearch.setParents((String[]) tParentResearches.toArray(new String[tParentResearches.size()]));
+ rResearch.setConcealed();
+ }
+ }
+ if (aResearchTriggers != null) {
+ rResearch.setItemTriggers(aResearchTriggers);
+ rResearch.setHidden();
+ }
+ rResearch.setPages((ResearchPage[]) tPages.toArray(new ResearchPage[tPages.size()]));
+ return rResearch.registerResearchItem();
+ }
+
public static Object addCrucibleRecipe(final String aResearch, final Object aInput, final ItemStack aOutput,
final List<TC_AspectStack_Ex> aAspects) {
@@ -190,23 +201,23 @@ public class ThaumcraftUtils {
public static boolean registerThaumcraftAspectsToItem(final ItemStack aStack,
final List<TC_AspectStack_Ex> aAspects, final boolean aAdditive) {
try {
- if (aAspects.isEmpty()) {
- return false;
- }
- AspectList h = getAspectList_Ex(aAspects);
- if (aAdditive && (h != null && h.size() > 0)) {
- ThaumcraftApi.registerComplexObjectTag(aStack, getAspectList_Ex(aAspects));
+ if (aAspects.isEmpty()) {
+ return false;
+ }
+ AspectList h = getAspectList_Ex(aAspects);
+ if (aAdditive && (h != null && h.size() > 0)) {
+ ThaumcraftApi.registerComplexObjectTag(aStack, getAspectList_Ex(aAspects));
+ return true;
+ }
+ else {
+ Logger.MATERIALS("[Aspect] Failed adding aspects to "+aStack.getDisplayName()+".");
+ }
+ final AspectList tAlreadyRegisteredAspects = ThaumcraftApiHelper.getObjectAspects(aStack);
+ if (tAlreadyRegisteredAspects == null || tAlreadyRegisteredAspects.size() <= 0) {
+ ThaumcraftApi.registerObjectTag(aStack, getAspectList_Ex(aAspects));
+ }
return true;
}
- else {
- Logger.MATERIALS("[Aspect] Failed adding aspects to "+aStack.getDisplayName()+".");
- }
- final AspectList tAlreadyRegisteredAspects = ThaumcraftApiHelper.getObjectAspects(aStack);
- if (tAlreadyRegisteredAspects == null || tAlreadyRegisteredAspects.size() <= 0) {
- ThaumcraftApi.registerObjectTag(aStack, getAspectList_Ex(aAspects));
- }
- return true;
- }
catch (Throwable t) {
Logger.MATERIALS("[Aspect] Failed adding aspects to "+aStack.getDisplayName()+".");
t.printStackTrace();
@@ -218,7 +229,7 @@ public class ThaumcraftUtils {
ThaumcraftApi.portableHoleBlackList.add(aBlock);
return true;
}
-
+
public static TC_AspectStack_Ex convertAspectStack(TC_AspectStack gtType) {
TC_AspectStack_Ex g = null;
if (gtType == null) {
@@ -245,4 +256,75 @@ public class ThaumcraftUtils {
return list;
}
+ public static void updateResearchNote(ItemStack a, ResearchNoteData b) {
+ updateResearchNote(a, new ResearchNoteDataWrapper(b));
+ }
+
+ public static void updateResearchNote(ItemStack a, ResearchNoteDataWrapper b) {
+ ResearchManager.updateData(a, b);
+ }
+
+ public static boolean isItemResearchNotes(ItemStack aStack) {
+ if (aStack != null && aStack.getItem() == HANDLER_Thaumcraft.mResearchNotes && HANDLER_Thaumcraft.mResearchNotes.getClass().isInstance(aStack.getItem())) {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isItemStackValidResearchNotes(ItemStack aStack) {
+ if (isItemResearchNotes(aStack) && aStack.getItemDamage() < 64) {
+ return true;
+ }
+ return false;
+ }
+
+ public static ResearchNoteDataWrapper gatherResults(ItemStack note) {
+ ResearchNoteDataWrapper research = null;
+ if (isItemResearchNotes(note)) {
+ research = new ResearchNoteDataWrapper(ResearchManager.getData(note));
+ }
+ return research;
+ }
+
+ public static void placeAspectIntoResearchNote(ItemStack note, World aWorld, final int q, final int r, final Aspect aspect) {
+ ResearchNoteDataWrapper data = gatherResults(note);
+ String mGTPP = CORE.gameProfile.getName();
+ EntityPlayer player = CORE.getFakePlayer(aWorld);
+
+ if (isItemResearchNotes(note) && data != null && note.getItemDamage() < 64) {
+ final boolean r2 = ResearchManager.isResearchComplete(mGTPP, "RESEARCHER1");
+ final boolean r3 = ResearchManager.isResearchComplete(mGTPP, "RESEARCHER2");
+ final HexUtils.Hex hex = new HexUtils.Hex(q, r);
+ ResearchManager.HexEntry he = null;
+ if (aspect != null) {
+ he = new ResearchManager.HexEntry(aspect, 2);
+ if (r3 && aWorld.rand.nextFloat() < 0.1f) {
+ aWorld.playSoundAtEntity((Entity) player, "random.orb", 0.2f, 0.9f + player.worldObj.rand.nextFloat() * 0.2f);
+ }
+ } else {
+ final float f = aWorld.rand.nextFloat();
+ if (data.hexEntries.get(hex.toString()).aspect != null
+ && ((r2 && f < 0.25f) || (r3 && f < 0.5f))) {
+ aWorld.playSoundAtEntity((Entity) player, "random.orb", 0.2f,
+ 0.9f + player.worldObj.rand.nextFloat() * 0.2f);
+ ResearchManager.scheduleSave(player);
+ }
+ he = new ResearchManager.HexEntry((Aspect) null, 0);
+ }
+ data.hexEntries.put(hex.toString(), he);
+ data.hexes.put(hex.toString(), hex);
+ updateResearchNote(note, data);
+ if (!aWorld.isRemote && ResearchManager.checkResearchCompletion(note, data, player.getCommandSenderName())) {
+ note.setItemDamage(64);
+ }
+ }
+ }
+
+ public static void completeResearchNote(World aWorld, ItemStack aStack) {
+ if (!aWorld.isRemote) {
+ if (isItemResearchNotes(aStack)) {
+ aStack.setItemDamage(64);
+ }
+ }
+ }
}