1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
package gtPlusPlus.xmod.witchery;
import java.lang.reflect.Field;
import java.util.ArrayList;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.oredict.OreDictionary;
import com.mojang.authlib.GameProfile;
import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.material.ALLOY;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
public class WitchUtils {
private static final GameProfile NORMAL_MINER_PROFILE;
private static final GameProfile KOBOLDITE_MINER_PROFILE;
static {
Field a1 = null, a2 = null;
GameProfile b1 = null, b2 = null;
if (LoadedMods.Witchery) {
try {
a1 = getField("com.emoniph.witchery.entity.ai.EntityAIDigBlocks", "NORMAL_MINER_PROFILE");
a2 = getField("com.emoniph.witchery.entity.ai.EntityAIDigBlocks", "KOBOLDITE_MINER_PROFILE");
b1 = (GameProfile) a1.get(null);
b2 = (GameProfile) a2.get(null);
} catch (Throwable t) {}
}
NORMAL_MINER_PROFILE = b1;
KOBOLDITE_MINER_PROFILE = b2;
}
// com.emoniph.witchery.entity.ai.EntityAIDigBlocks.onHarvestDrops(EntityPlayer, HarvestDropsEvent)
public static void onHarvestDrops(final EntityPlayer harvester, final BlockEvent.HarvestDropsEvent event) {
if (LoadedMods.Witchery) {
if (harvester != null && !harvester.worldObj.isRemote
&& !event.isCanceled()
&& (isEqual(harvester.getGameProfile(), KOBOLDITE_MINER_PROFILE)
|| isEqual(harvester.getGameProfile(), NORMAL_MINER_PROFILE))) {
final boolean hasKobolditePick = isEqual(harvester.getGameProfile(), KOBOLDITE_MINER_PROFILE);
final ArrayList<ItemStack> newDrops = new ArrayList<ItemStack>();
double kobolditeChance = hasKobolditePick ? 0.02 : 0.01;
for (final ItemStack drop : event.drops) {
final int[] oreIDs = OreDictionary.getOreIDs(drop);
boolean addOriginal = true;
if (oreIDs.length > 0) {
final String oreName = OreDictionary.getOreName(oreIDs[0]);
if (oreName != null && oreName.startsWith("ore")) {
final ItemStack smeltedDrop = FurnaceRecipes.smelting().getSmeltingResult(drop);
if (smeltedDrop != null && hasKobolditePick && harvester.worldObj.rand.nextDouble() < 0.5) {
addOriginal = false;
newDrops.add(smeltedDrop.copy());
newDrops.add(smeltedDrop.copy());
if (harvester.worldObj.rand.nextDouble() < 0.25) {
newDrops.add(smeltedDrop.copy());
}
}
kobolditeChance = (hasKobolditePick ? 0.08 : 0.05);
}
}
if (addOriginal) {
newDrops.add(drop);
}
}
event.drops.clear();
for (final ItemStack newDrop : newDrops) {
event.drops.add(newDrop);
}
if (kobolditeChance > 0.0 && harvester.worldObj.rand.nextDouble() < kobolditeChance) {
event.drops.add(ALLOY.KOBOLDITE.getDust(1));
}
}
}
}
public static Field getField(String aClassName, String aFieldName) {
Class c;
c = ReflectionUtils.getClass(aClassName);
if (c != null) {
Field f = ReflectionUtils.getField(c, aFieldName);
if (f != null) {
return f;
}
}
return null;
}
public static boolean isEqual(final GameProfile a, final GameProfile b) {
return a != null && b != null && a.getId() != null && b.getId() != null && a.getId().equals(b.getId());
}
}
|