From 28e65a9f8f60f41e04a33e7855513acbd85b0a40 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Tue, 11 Apr 2023 20:37:39 +0200 Subject: [PATCH 01/26] Change reflections to mixins --- .../kubatech/loaders/MobRecipeLoader.java | 651 ++++++++---------- src/main/java/kubatech/mixin/Mixin.java | 8 +- .../mixins/minecraft/EntityAccessor.java | 15 + .../minecraft/EntityLivingAccessor.java | 16 + .../minecraft/EntityLivingBaseAccessor.java | 16 + .../mixins/minecraft/EntitySlimeAccessor.java | 13 + 6 files changed, 361 insertions(+), 358 deletions(-) create mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/EntityAccessor.java create mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingAccessor.java create mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingBaseAccessor.java create mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/EntitySlimeAccessor.java diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index cfac6bc9..3bfe480b 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -27,8 +27,6 @@ import java.io.File; import java.io.Reader; import java.io.Writer; -import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.nio.charset.StandardCharsets; import java.util.*; @@ -45,6 +43,10 @@ import kubatech.api.utils.ModUtils; import kubatech.config.Config; import kubatech.config.OverridesConfig; +import kubatech.mixin.mixins.minecraft.EntityAccessor; +import kubatech.mixin.mixins.minecraft.EntityLivingAccessor; +import kubatech.mixin.mixins.minecraft.EntityLivingBaseAccessor; +import kubatech.mixin.mixins.minecraft.EntitySlimeAccessor; import kubatech.nei.Mob_Handler; import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber; import minetweaker.MineTweakerAPI; @@ -58,7 +60,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.monster.EntitySlime; @@ -92,12 +93,8 @@ public class MobRecipeLoader { private static final Logger LOG = LogManager.getLogger(Tags.MODID + "[Mob Recipe Loader]"); - private static final String dropFewItemsName = isDeobfuscatedEnvironment ? "dropFewItems" : "func_70628_a"; - private static final String dropRareDropName = isDeobfuscatedEnvironment ? "dropRareDrop" : "func_70600_l"; - private static final String setSlimeSizeName = isDeobfuscatedEnvironment ? "setSlimeSize" : "func_70799_a"; private static final String addRandomArmorName = isDeobfuscatedEnvironment ? "addRandomArmor" : "func_82164_bB"; private static final String enchantEquipmentName = isDeobfuscatedEnvironment ? "enchantEquipment" : "func_82162_bC"; - private static final String randName = isDeobfuscatedEnvironment ? "rand" : "field_70146_Z"; private static boolean alreadyGenerated = false; public static boolean isInGenerationProcess = false; @@ -678,32 +675,6 @@ public Block getBlock(int aX, int aY, int aZ) { long time = System.currentTimeMillis(); - Method setSlimeSize; - Method dropFewItems; - Method dropRareDrop; - Method addRandomArmor; - Method enchantEquipment; - Field rand; - - try { - setSlimeSize = EntitySlime.class.getDeclaredMethod(setSlimeSizeName, int.class); - setSlimeSize.setAccessible(true); - dropFewItems = EntityLivingBase.class.getDeclaredMethod(dropFewItemsName, boolean.class, int.class); - dropFewItems.setAccessible(true); - dropRareDrop = EntityLivingBase.class.getDeclaredMethod(dropRareDropName, int.class); - dropRareDrop.setAccessible(true); - addRandomArmor = EntityLiving.class.getDeclaredMethod(addRandomArmorName); - addRandomArmor.setAccessible(true); - enchantEquipment = EntityLiving.class.getDeclaredMethod(enchantEquipmentName); - enchantEquipment.setAccessible(true); - rand = Entity.class.getDeclaredField(randName); - rand.setAccessible(true); - } catch (Exception ex) { - LOG.error("Failed to obtain methods"); - isInGenerationProcess = false; - return; - } - dropCollector collector = new dropCollector(); // Stupid MC code, I need to cast myself @@ -751,372 +722,338 @@ else if (StatCollector.translateToLocal("entity." + k + ".name") // POWERFULL GENERATION - e.captureDrops = true; + try { - if (e instanceof EntitySlime) try { - setSlimeSize.invoke(e, 1); - } catch (Exception ex) { - ex.printStackTrace(); - return; - } + e.captureDrops = true; - try { - rand.set(e, frand); - } catch (Exception ex) { - ex.printStackTrace(); - return; - } + if (e instanceof EntitySlime) + ((EntitySlimeAccessor) e).callSetSlimeSize(1); + + ((EntityAccessor) e).setRand(frand); + + droplist drops = new droplist(); + droplist raredrops = new droplist(); + droplist superraredrops = new droplist(); + droplist additionaldrops = new droplist(); + droplist dropslooting = new droplist(); - droplist drops = new droplist(); - droplist raredrops = new droplist(); - droplist superraredrops = new droplist(); - droplist additionaldrops = new droplist(); - droplist dropslooting = new droplist(); - - frand.newRound(); - collector.newRound(); - - if (v.getName() - .startsWith("com.emoniph.witchery")) { - try { - dropFewItems.invoke(e, true, 0); - } catch (Exception ex) { - ex.printStackTrace(); - return; - } - frand.newRound(); - frand.exceptionOnEnchantTry = true; - boolean enchantmentDetected = false; - try { - dropFewItems.invoke(e, true, 0); - } catch (Exception ex) { - enchantmentDetected = true; - } - int w = frand.walkCounter; frand.newRound(); - if (enchantmentDetected) { - frand.maxWalkCount = w; - collector.booksAlwaysRandomlyEnchanted = true; - } - e.capturedDrops.clear(); - } + collector.newRound(); - boolean second = false; - do { - try { - dropFewItems.invoke(e, true, 0); - } catch (Exception ex) { - ex.printStackTrace(); - return; + if (v.getName() + .startsWith("com.emoniph.witchery")) { + ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); + frand.newRound(); + frand.exceptionOnEnchantTry = true; + boolean enchantmentDetected = false; + try { + ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); + } catch (Exception ex) { + enchantmentDetected = true; + } + int w = frand.walkCounter; + frand.newRound(); + if (enchantmentDetected) { + frand.maxWalkCount = w; + collector.booksAlwaysRandomlyEnchanted = true; + } + e.capturedDrops.clear(); } - collector.addDrop(drops, e.capturedDrops, frand.chance); - if (second && frand.chance < 0.0000001d) { - LOG.warn("Skipping " + k + " normal dropmap because it's too randomized"); - break; - } - second = true; + boolean second = false; + do { + ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); + collector.addDrop(drops, e.capturedDrops, frand.chance); - } while (frand.nextRound()); + if (second && frand.chance < 0.0000001d) { + LOG.warn("Skipping " + k + " normal dropmap because it's too randomized"); + break; + } + second = true; - frand.newRound(); - collector.newRound(); + } while (frand.nextRound()); - if (v.getName() - .startsWith("com.emoniph.witchery")) { - try { - dropFewItems.invoke(e, true, 0); - } catch (Exception ex) { - ex.printStackTrace(); - return; - } frand.newRound(); - frand.exceptionOnEnchantTry = true; - boolean enchantmentDetected = false; - try { - dropFewItems.invoke(e, true, 0); - } catch (Exception ex) { - enchantmentDetected = true; - } - int w = frand.walkCounter; - frand.newRound(); - if (enchantmentDetected) { - frand.maxWalkCount = w; - collector.booksAlwaysRandomlyEnchanted = true; - } - e.capturedDrops.clear(); - } + collector.newRound(); - second = false; - do { - try { - dropFewItems.invoke(e, true, 1); - } catch (Exception ex) { - ex.printStackTrace(); - return; + if (v.getName() + .startsWith("com.emoniph.witchery")) { + ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); + frand.newRound(); + frand.exceptionOnEnchantTry = true; + boolean enchantmentDetected = false; + try { + ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); + } catch (Exception ex) { + enchantmentDetected = true; + } + int w = frand.walkCounter; + frand.newRound(); + if (enchantmentDetected) { + frand.maxWalkCount = w; + collector.booksAlwaysRandomlyEnchanted = true; + } + e.capturedDrops.clear(); } - collector.addDrop(dropslooting, e.capturedDrops, frand.chance); - if (second && frand.chance < 0.0000001d) { - LOG.warn("Skipping " + k + " normal dropmap because it's too randomized"); - break; - } - second = true; + second = false; + do { + ((EntityLivingBaseAccessor) e).callDropFewItems(true, 1); + collector.addDrop(dropslooting, e.capturedDrops, frand.chance); - } while (frand.nextRound()); + if (second && frand.chance < 0.0000001d) { + LOG.warn("Skipping " + k + " normal dropmap because it's too randomized"); + break; + } + second = true; - frand.newRound(); - collector.newRound(); + } while (frand.nextRound()); - second = false; - do { - try { - dropRareDrop.invoke(e, 0); - } catch (Exception ex) { - ex.printStackTrace(); - return; - } - collector.addDrop(raredrops, e.capturedDrops, frand.chance); + frand.newRound(); + collector.newRound(); - if (second && frand.chance < 0.0000001d) { - LOG.warn("Skipping " + k + " rare dropmap because it's too randomized"); - break; - } - second = true; + second = false; + do { + ((EntityLivingBaseAccessor) e).callDropRareDrop(0); + collector.addDrop(raredrops, e.capturedDrops, frand.chance); - } while (frand.nextRound()); + if (second && frand.chance < 0.0000001d) { + LOG.warn("Skipping " + k + " rare dropmap because it's too randomized"); + break; + } + second = true; - frand.newRound(); - collector.newRound(); + } while (frand.nextRound()); - second = false; - do { - try { - dropRareDrop.invoke(e, 1); - } catch (Exception ex) { - ex.printStackTrace(); - return; - } - collector.addDrop(superraredrops, e.capturedDrops, frand.chance); + frand.newRound(); + collector.newRound(); - if (second && frand.chance < 0.0000001d) { - LOG.warn("Skipping " + k + " rare dropmap because it's too randomized"); - break; - } - second = true; - - } while (frand.nextRound()); - - frand.newRound(); - collector.newRound(); - - if (registeringWitherSkeleton && e instanceof EntitySkeleton && k.equals("witherSkeleton")) { - dropinstance i = new dropinstance(new ItemStack(Items.stone_sword), additionaldrops); - i.isDamageRandomized = true; - int maxdamage = i.stack.getMaxDamage(); - int max = Math.max(maxdamage - 25, 1); - for (int d = Math.min(max, 25); d <= max; d++) i.damagesPossible.put(d, 1); - additionaldrops.add(i, 1d); - } else try { - Class cl = e.getClass(); - boolean detectedException; - do { - detectedException = false; - try { - cl.getDeclaredMethod(addRandomArmorName); - } catch (Exception ex) { - detectedException = true; - cl = cl.getSuperclass(); - } - } while (detectedException && !cl.equals(Entity.class)); - if (cl.equals(EntityLiving.class) || cl.equals(Entity.class)) throw new Exception(); - cl = e.getClass(); - do { - detectedException = false; - try { - cl.getDeclaredMethod(enchantEquipmentName); - } catch (Exception ex) { - detectedException = true; - cl = cl.getSuperclass(); - } - } while (detectedException && !cl.equals(EntityLiving.class)); - boolean usingVanillaEnchantingMethod = cl.equals(EntityLiving.class); - double chanceModifierLocal = 1f; - if (v.getName() - .startsWith("twilightforest.entity")) { - frand.forceFloatValue = 0f; - chanceModifierLocal = 0.25f; - } second = false; do { - addRandomArmor.invoke(e); - if (!usingVanillaEnchantingMethod) enchantEquipment.invoke(e); - ItemStack[] lastActiveItems = e.getLastActiveItems(); - for (int j = 0, lastActiveItemsLength = lastActiveItems.length; j < lastActiveItemsLength; j++) { - ItemStack stack = lastActiveItems[j]; - if (stack != null) { - if (LoaderReference.Thaumcraft) if (stack.getItem() instanceof ItemWandCasting) continue; // crashes - // the - // game - // when - // rendering - // in - // GUI - - int randomenchant = -1; - if (stack.hasTagCompound() - && stack.stackTagCompound.hasKey(randomEnchantmentDetectedString)) { - randomenchant = stack.stackTagCompound.getInteger(randomEnchantmentDetectedString); - stack.stackTagCompound.removeTag("ench"); - } - dropinstance i = additionaldrops.add( - new dropinstance(stack.copy(), additionaldrops), - frand.chance * chanceModifierLocal - * (usingVanillaEnchantingMethod ? (j == 0 ? 0.75d : 0.5d) : 1d)); - if (!i.isDamageRandomized && i.stack.isItemStackDamageable()) { - i.isDamageRandomized = true; - int maxdamage = i.stack.getMaxDamage(); - int max = Math.max(maxdamage - 25, 1); - for (int d = Math.min(max, 25); d <= max; d++) i.damagesPossible.put(d, 1); - } - if (!i.isEnchatmentRandomized && randomenchant != -1) { - i.isEnchatmentRandomized = true; - i.enchantmentLevel = randomenchant; - } - if (usingVanillaEnchantingMethod) { - if (!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setInteger(randomEnchantmentDetectedString, 14); - dropinstance newdrop = additionaldrops.add( - new dropinstance(stack.copy(), additionaldrops), - frand.chance * chanceModifierLocal * (j == 0 ? 0.25d : 0.5d)); - newdrop.isEnchatmentRandomized = true; - newdrop.enchantmentLevel = 14; - newdrop.isDamageRandomized = i.isDamageRandomized; - newdrop.damagesPossible = (HashMap) i.damagesPossible.clone(); - } - } - } - Arrays.fill(e.getLastActiveItems(), null); + ((EntityLivingBaseAccessor) e).callDropRareDrop(1); + collector.addDrop(superraredrops, e.capturedDrops, frand.chance); if (second && frand.chance < 0.0000001d) { - LOG.warn("Skipping " + k + " additional dropmap because it's too randomized"); + LOG.warn("Skipping " + k + " rare dropmap because it's too randomized"); break; } second = true; } while (frand.nextRound()); - } catch (Exception ignored) {} - frand.newRound(); - collector.newRound(); + frand.newRound(); + collector.newRound(); + + if (registeringWitherSkeleton && e instanceof EntitySkeleton && k.equals("witherSkeleton")) { + dropinstance i = new dropinstance(new ItemStack(Items.stone_sword), additionaldrops); + i.isDamageRandomized = true; + int maxdamage = i.stack.getMaxDamage(); + int max = Math.max(maxdamage - 25, 1); + for (int d = Math.min(max, 25); d <= max; d++) i.damagesPossible.put(d, 1); + additionaldrops.add(i, 1d); + } else try { + Class cl = e.getClass(); + boolean detectedException; + do { + detectedException = false; + try { + cl.getDeclaredMethod(addRandomArmorName); + } catch (Exception ex) { + detectedException = true; + cl = cl.getSuperclass(); + } + } while (detectedException && !cl.equals(Entity.class)); + if (cl.equals(EntityLiving.class) || cl.equals(Entity.class)) throw new Exception(); + cl = e.getClass(); + do { + detectedException = false; + try { + cl.getDeclaredMethod(enchantEquipmentName); + } catch (Exception ex) { + detectedException = true; + cl = cl.getSuperclass(); + } + } while (detectedException && !cl.equals(EntityLiving.class)); + boolean usingVanillaEnchantingMethod = cl.equals(EntityLiving.class); + double chanceModifierLocal = 1f; + if (v.getName() + .startsWith("twilightforest.entity")) { + frand.forceFloatValue = 0f; + chanceModifierLocal = 0.25f; + } + second = false; + do { + ((EntityLivingAccessor) e).callAddRandomArmor(); + if (!usingVanillaEnchantingMethod) ((EntityLivingAccessor) e).callEnchantEquipment(); + ItemStack[] lastActiveItems = e.getLastActiveItems(); + for (int j = 0, lastActiveItemsLength = lastActiveItems.length; j + < lastActiveItemsLength; j++) { + ItemStack stack = lastActiveItems[j]; + if (stack != null) { + if (LoaderReference.Thaumcraft) + if (stack.getItem() instanceof ItemWandCasting) continue; // crashes the game when + // rendering in GUI + + int randomenchant = -1; + if (stack.hasTagCompound() + && stack.stackTagCompound.hasKey(randomEnchantmentDetectedString)) { + randomenchant = stack.stackTagCompound.getInteger(randomEnchantmentDetectedString); + stack.stackTagCompound.removeTag("ench"); + } + dropinstance i = additionaldrops.add( + new dropinstance(stack.copy(), additionaldrops), + frand.chance * chanceModifierLocal + * (usingVanillaEnchantingMethod ? (j == 0 ? 0.75d : 0.5d) : 1d)); + if (!i.isDamageRandomized && i.stack.isItemStackDamageable()) { + i.isDamageRandomized = true; + int maxdamage = i.stack.getMaxDamage(); + int max = Math.max(maxdamage - 25, 1); + for (int d = Math.min(max, 25); d <= max; d++) i.damagesPossible.put(d, 1); + } + if (!i.isEnchatmentRandomized && randomenchant != -1) { + i.isEnchatmentRandomized = true; + i.enchantmentLevel = randomenchant; + } + if (usingVanillaEnchantingMethod) { + if (!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); + stack.stackTagCompound.setInteger(randomEnchantmentDetectedString, 14); + dropinstance newdrop = additionaldrops.add( + new dropinstance(stack.copy(), additionaldrops), + frand.chance * chanceModifierLocal * (j == 0 ? 0.25d : 0.5d)); + newdrop.isEnchatmentRandomized = true; + newdrop.enchantmentLevel = 14; + newdrop.isDamageRandomized = i.isDamageRandomized; + newdrop.damagesPossible = (HashMap) i.damagesPossible.clone(); + } + } + } + Arrays.fill(e.getLastActiveItems(), null); - if (drops.isEmpty() && raredrops.isEmpty() && additionaldrops.isEmpty()) { - ArrayList arr = new ArrayList<>(); - GeneralMobList.put(k, new GeneralMappedMob(e, MobRecipe.generateMobRecipe(e, k, arr), arr)); - LOG.info("Mapped " + k); - return; - } + if (second && frand.chance < 0.0000001d) { + LOG.warn("Skipping " + k + " additional dropmap because it's too randomized"); + break; + } + second = true; - ArrayList moboutputs = new ArrayList<>(drops.size() + raredrops.size() + additionaldrops.size()); + } while (frand.nextRound()); + } catch (Exception ignored) {} - for (dropinstance drop : drops.drops) { - ItemStack stack = drop.stack; - if (stack.hasTagCompound()) stack.stackTagCompound.removeTag(randomEnchantmentDetectedString); - int chance = drop.getchance(10000); - if (chance > 10000) { - int div = (int) Math.ceil(chance / 10000d); - stack.stackSize *= div; - chance /= div; - } - if (chance == 0) { - LOG.warn("Detected 0% loot, setting to 0.01%"); - chance = 1; - } - dropinstance dlooting = dropslooting.get(drop); - moboutputs.add( - new MobDrop( - stack, - MobDrop.DropType.Normal, - chance, - drop.isEnchatmentRandomized ? drop.enchantmentLevel : null, - drop.isDamageRandomized ? drop.damagesPossible : null, - dlooting != null && dlooting.dropcount > drop.dropcount, - false)); - } - for (dropinstance drop : raredrops.drops) { - ItemStack stack = drop.stack; - if (stack.hasTagCompound()) stack.stackTagCompound.removeTag(randomEnchantmentDetectedString); - int chance = drop.getchance(250); - if (chance > 10000) { - int div = (int) Math.ceil(chance / 10000d); - stack.stackSize *= div; - chance /= div; - } - if (chance == 0) { - LOG.warn("Detected 0% loot, setting to 0.01%"); - chance = 1; + frand.newRound(); + collector.newRound(); + + if (drops.isEmpty() && raredrops.isEmpty() && additionaldrops.isEmpty()) { + ArrayList arr = new ArrayList<>(); + GeneralMobList.put(k, new GeneralMappedMob(e, MobRecipe.generateMobRecipe(e, k, arr), arr)); + LOG.info("Mapped " + k); + return; } - moboutputs.add( - new MobDrop( - stack, - MobDrop.DropType.Rare, - chance, - drop.isEnchatmentRandomized ? drop.enchantmentLevel : null, - drop.isDamageRandomized ? drop.damagesPossible : null, - false, - false)); - } - for (dropinstance drop : superraredrops.drops) { - if (raredrops.contains(drop)) continue; - ItemStack stack = drop.stack; - if (stack.hasTagCompound()) stack.stackTagCompound.removeTag(randomEnchantmentDetectedString); - int chance = drop.getchance(50); - if (chance > 10000) { - int div = (int) Math.ceil(chance / 10000d); - stack.stackSize *= div; - chance /= div; + + ArrayList moboutputs = new ArrayList<>( + drops.size() + raredrops.size() + additionaldrops.size()); + + for (dropinstance drop : drops.drops) { + ItemStack stack = drop.stack; + if (stack.hasTagCompound()) stack.stackTagCompound.removeTag(randomEnchantmentDetectedString); + int chance = drop.getchance(10000); + if (chance > 10000) { + int div = (int) Math.ceil(chance / 10000d); + stack.stackSize *= div; + chance /= div; + } + if (chance == 0) { + LOG.warn("Detected 0% loot, setting to 0.01%"); + chance = 1; + } + dropinstance dlooting = dropslooting.get(drop); + moboutputs.add( + new MobDrop( + stack, + MobDrop.DropType.Normal, + chance, + drop.isEnchatmentRandomized ? drop.enchantmentLevel : null, + drop.isDamageRandomized ? drop.damagesPossible : null, + dlooting != null && dlooting.dropcount > drop.dropcount, + false)); } - if (chance == 0) { - LOG.warn("Detected 0% loot, setting to 0.01%"); - chance = 1; + for (dropinstance drop : raredrops.drops) { + ItemStack stack = drop.stack; + if (stack.hasTagCompound()) stack.stackTagCompound.removeTag(randomEnchantmentDetectedString); + int chance = drop.getchance(250); + if (chance > 10000) { + int div = (int) Math.ceil(chance / 10000d); + stack.stackSize *= div; + chance /= div; + } + if (chance == 0) { + LOG.warn("Detected 0% loot, setting to 0.01%"); + chance = 1; + } + moboutputs.add( + new MobDrop( + stack, + MobDrop.DropType.Rare, + chance, + drop.isEnchatmentRandomized ? drop.enchantmentLevel : null, + drop.isDamageRandomized ? drop.damagesPossible : null, + false, + false)); } - moboutputs.add( - new MobDrop( - stack, - MobDrop.DropType.Rare, - chance, - drop.isEnchatmentRandomized ? drop.enchantmentLevel : null, - drop.isDamageRandomized ? drop.damagesPossible : null, - false, - false)); - } - for (dropinstance drop : additionaldrops.drops) { - ItemStack stack = drop.stack; - if (stack.hasTagCompound()) stack.stackTagCompound.removeTag(randomEnchantmentDetectedString); - int chance = drop.getchance(850); - if (chance > 10000) { - int div = (int) Math.ceil(chance / 10000d); - stack.stackSize *= div; - chance /= div; + for (dropinstance drop : superraredrops.drops) { + if (raredrops.contains(drop)) continue; + ItemStack stack = drop.stack; + if (stack.hasTagCompound()) stack.stackTagCompound.removeTag(randomEnchantmentDetectedString); + int chance = drop.getchance(50); + if (chance > 10000) { + int div = (int) Math.ceil(chance / 10000d); + stack.stackSize *= div; + chance /= div; + } + if (chance == 0) { + LOG.warn("Detected 0% loot, setting to 0.01%"); + chance = 1; + } + moboutputs.add( + new MobDrop( + stack, + MobDrop.DropType.Rare, + chance, + drop.isEnchatmentRandomized ? drop.enchantmentLevel : null, + drop.isDamageRandomized ? drop.damagesPossible : null, + false, + false)); } - if (chance == 0) { - LOG.warn("Detected 0% loot, setting to 0.01%"); - chance = 1; + for (dropinstance drop : additionaldrops.drops) { + ItemStack stack = drop.stack; + if (stack.hasTagCompound()) stack.stackTagCompound.removeTag(randomEnchantmentDetectedString); + int chance = drop.getchance(850); + if (chance > 10000) { + int div = (int) Math.ceil(chance / 10000d); + stack.stackSize *= div; + chance /= div; + } + if (chance == 0) { + LOG.warn("Detected 0% loot, setting to 0.01%"); + chance = 1; + } + moboutputs.add( + new MobDrop( + stack, + MobDrop.DropType.Additional, + chance, + drop.isEnchatmentRandomized ? drop.enchantmentLevel : null, + drop.isDamageRandomized ? drop.damagesPossible : null, + false, + false)); } - moboutputs.add( - new MobDrop( - stack, - MobDrop.DropType.Additional, - chance, - drop.isEnchatmentRandomized ? drop.enchantmentLevel : null, - drop.isDamageRandomized ? drop.damagesPossible : null, - false, - false)); - } - GeneralMobList.put(k, new GeneralMappedMob(e, MobRecipe.generateMobRecipe(e, k, moboutputs), moboutputs)); + GeneralMobList + .put(k, new GeneralMappedMob(e, MobRecipe.generateMobRecipe(e, k, moboutputs), moboutputs)); - LOG.info("Mapped " + k); + LOG.info("Mapped " + k); + } catch (Exception ex) { + LOG.error("Something went wrong while generating recipes for " + k + ", stacktrace: "); + ex.printStackTrace(); + } }); if (registeringWitherSkeleton) stringToClassMapping.remove("witherSkeleton"); diff --git a/src/main/java/kubatech/mixin/Mixin.java b/src/main/java/kubatech/mixin/Mixin.java index 74f0ca52..ea0e8af7 100644 --- a/src/main/java/kubatech/mixin/Mixin.java +++ b/src/main/java/kubatech/mixin/Mixin.java @@ -12,7 +12,13 @@ public enum Mixin { // Minecraft EnchantmentHelperMixin("minecraft.EnchantmentHelperMixin", VANILLA), - WorldMixin("minecraft.WorldMixin", VANILLA); + WorldMixin("minecraft.WorldMixin", VANILLA), + EntityAccessor("minecraft.EntityAccessor", VANILLA), + EntityLivingAccessor("minecraft.EntityLivingAccessor", VANILLA), + EntityLivingBaseAccessor("minecraft.EntityLivingBaseAccessor", VANILLA), + EntitySlimeAccessor("minecraft.EntitySlimeAccessor", VANILLA), + + ; public final String mixinClass; public final List targetedMods; diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/EntityAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/EntityAccessor.java new file mode 100644 index 00000000..67e42acf --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/minecraft/EntityAccessor.java @@ -0,0 +1,15 @@ +package kubatech.mixin.mixins.minecraft; + +import java.util.Random; + +import net.minecraft.entity.Entity; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = Entity.class) +public interface EntityAccessor { + + @Accessor + void setRand(Random rand); +} diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingAccessor.java new file mode 100644 index 00000000..59f8ea66 --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingAccessor.java @@ -0,0 +1,16 @@ +package kubatech.mixin.mixins.minecraft; + +import net.minecraft.entity.EntityLiving; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(value = EntityLiving.class) +public interface EntityLivingAccessor { + + @Invoker + void callAddRandomArmor(); + + @Invoker + void callEnchantEquipment(); +} diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingBaseAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingBaseAccessor.java new file mode 100644 index 00000000..95370b87 --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingBaseAccessor.java @@ -0,0 +1,16 @@ +package kubatech.mixin.mixins.minecraft; + +import net.minecraft.entity.EntityLivingBase; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(value = EntityLivingBase.class) +public interface EntityLivingBaseAccessor { + + @Invoker + void callDropFewItems(boolean recentlyHit, int lootingLevel); + + @Invoker + void callDropRareDrop(int lootingLevel); +} diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/EntitySlimeAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/EntitySlimeAccessor.java new file mode 100644 index 00000000..d7b4eaaf --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/minecraft/EntitySlimeAccessor.java @@ -0,0 +1,13 @@ +package kubatech.mixin.mixins.minecraft; + +import net.minecraft.entity.monster.EntitySlime; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(value = EntitySlime.class) +public interface EntitySlimeAccessor { + + @Invoker + void callSetSlimeSize(int size); +} From ba735dbaca2e82d3ad7eaf50f1cd31239eda9f9b Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Tue, 11 Apr 2023 20:38:44 +0200 Subject: [PATCH 02/26] Wrap witchery checking --- .../kubatech/loaders/MobRecipeLoader.java | 58 +++++++------------ 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 3bfe480b..940748d9 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -740,25 +740,29 @@ else if (StatCollector.translateToLocal("entity." + k + ".name") frand.newRound(); collector.newRound(); - if (v.getName() - .startsWith("com.emoniph.witchery")) { - ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); - frand.newRound(); - frand.exceptionOnEnchantTry = true; - boolean enchantmentDetected = false; - try { + Runnable checkForWitchery = () -> { + if (v.getName() + .startsWith("com.emoniph.witchery")) { ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); - } catch (Exception ex) { - enchantmentDetected = true; - } - int w = frand.walkCounter; - frand.newRound(); - if (enchantmentDetected) { - frand.maxWalkCount = w; - collector.booksAlwaysRandomlyEnchanted = true; + frand.newRound(); + frand.exceptionOnEnchantTry = true; + boolean enchantmentDetected = false; + try { + ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); + } catch (Exception ex) { + enchantmentDetected = true; + } + int w = frand.walkCounter; + frand.newRound(); + if (enchantmentDetected) { + frand.maxWalkCount = w; + collector.booksAlwaysRandomlyEnchanted = true; + } + e.capturedDrops.clear(); } - e.capturedDrops.clear(); - } + }; + + checkForWitchery.run(); boolean second = false; do { @@ -776,25 +780,7 @@ else if (StatCollector.translateToLocal("entity." + k + ".name") frand.newRound(); collector.newRound(); - if (v.getName() - .startsWith("com.emoniph.witchery")) { - ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); - frand.newRound(); - frand.exceptionOnEnchantTry = true; - boolean enchantmentDetected = false; - try { - ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); - } catch (Exception ex) { - enchantmentDetected = true; - } - int w = frand.walkCounter; - frand.newRound(); - if (enchantmentDetected) { - frand.maxWalkCount = w; - collector.booksAlwaysRandomlyEnchanted = true; - } - e.capturedDrops.clear(); - } + checkForWitchery.run(); second = false; do { From 6ee90cbeb5e152c527202cefd3d0abbabefecee1 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Tue, 11 Apr 2023 21:22:57 +0200 Subject: [PATCH 03/26] Remove more repeating code --- .../java/kubatech/api/utils/ModUtils.java | 7 ++ .../kubatech/loaders/MobRecipeLoader.java | 90 +++++++------------ 2 files changed, 40 insertions(+), 57 deletions(-) diff --git a/src/main/java/kubatech/api/utils/ModUtils.java b/src/main/java/kubatech/api/utils/ModUtils.java index e618c255..88da253a 100644 --- a/src/main/java/kubatech/api/utils/ModUtils.java +++ b/src/main/java/kubatech/api/utils/ModUtils.java @@ -38,6 +38,13 @@ public class ModUtils { public static final boolean isDeobfuscatedEnvironment = (boolean) Launch.blackboard .get("fml.deobfuscatedEnvironment"); public static boolean isClientSided = false; + + @FunctionalInterface + public interface TriConsumer { + + void accept(T t, U u, V v); + } + private static final HashMap classNamesToModIDs = new HashMap<>(); private static final Map.Entry emptyEntry = new AbstractMap.SimpleEntry<>("", ""); diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 940748d9..3d454b73 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -30,6 +30,7 @@ import java.lang.reflect.Modifier; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.function.Supplier; import java.util.stream.Collectors; import kubatech.Tags; @@ -41,6 +42,7 @@ import kubatech.api.network.LoadConfigPacket; import kubatech.api.utils.GSONUtils; import kubatech.api.utils.ModUtils; +import kubatech.api.utils.ModUtils.TriConsumer; import kubatech.config.Config; import kubatech.config.OverridesConfig; import kubatech.mixin.mixins.minecraft.EntityAccessor; @@ -726,8 +728,7 @@ else if (StatCollector.translateToLocal("entity." + k + ".name") e.captureDrops = true; - if (e instanceof EntitySlime) - ((EntitySlimeAccessor) e).callSetSlimeSize(1); + if (e instanceof EntitySlime) ((EntitySlimeAccessor) e).callSetSlimeSize(1); ((EntityAccessor) e).setRand(frand); @@ -762,73 +763,48 @@ else if (StatCollector.translateToLocal("entity." + k + ".name") } }; - checkForWitchery.run(); + TriConsumer, droplist, String> doTheDrop = (callerCanceller, dList, dListName) -> { + boolean second = false; + do { + if (!callerCanceller.get()) break; - boolean second = false; - do { - ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); - collector.addDrop(drops, e.capturedDrops, frand.chance); + collector.addDrop(dList, e.capturedDrops, frand.chance); - if (second && frand.chance < 0.0000001d) { - LOG.warn("Skipping " + k + " normal dropmap because it's too randomized"); - break; - } - second = true; + if (second && frand.chance < 0.0000001d) { + LOG.warn("Skipping " + k + " " + dListName + " dropmap because it's too randomized"); + break; + } + second = true; - } while (frand.nextRound()); + } while (frand.nextRound()); - frand.newRound(); - collector.newRound(); + frand.newRound(); + collector.newRound(); + }; checkForWitchery.run(); - second = false; - do { - ((EntityLivingBaseAccessor) e).callDropFewItems(true, 1); - collector.addDrop(dropslooting, e.capturedDrops, frand.chance); - - if (second && frand.chance < 0.0000001d) { - LOG.warn("Skipping " + k + " normal dropmap because it's too randomized"); - break; - } - second = true; + doTheDrop.accept(() -> { + ((EntityLivingBaseAccessor) e).callDropFewItems(true, 0); + return true; + }, drops, "normal"); - } while (frand.nextRound()); + checkForWitchery.run(); - frand.newRound(); - collector.newRound(); + doTheDrop.accept(() -> { + ((EntityLivingBaseAccessor) e).callDropFewItems(true, 1); + return true; + }, dropslooting, "normal"); - second = false; - do { + doTheDrop.accept(() -> { ((EntityLivingBaseAccessor) e).callDropRareDrop(0); - collector.addDrop(raredrops, e.capturedDrops, frand.chance); - - if (second && frand.chance < 0.0000001d) { - LOG.warn("Skipping " + k + " rare dropmap because it's too randomized"); - break; - } - second = true; - - } while (frand.nextRound()); - - frand.newRound(); - collector.newRound(); + return true; + }, raredrops, "rare"); - second = false; - do { + doTheDrop.accept(() -> { ((EntityLivingBaseAccessor) e).callDropRareDrop(1); - collector.addDrop(superraredrops, e.capturedDrops, frand.chance); - - if (second && frand.chance < 0.0000001d) { - LOG.warn("Skipping " + k + " rare dropmap because it's too randomized"); - break; - } - second = true; - - } while (frand.nextRound()); - - frand.newRound(); - collector.newRound(); + return true; + }, superraredrops, "rare"); if (registeringWitherSkeleton && e instanceof EntitySkeleton && k.equals("witherSkeleton")) { dropinstance i = new dropinstance(new ItemStack(Items.stone_sword), additionaldrops); @@ -867,7 +843,7 @@ else if (StatCollector.translateToLocal("entity." + k + ".name") frand.forceFloatValue = 0f; chanceModifierLocal = 0.25f; } - second = false; + boolean second = false; do { ((EntityLivingAccessor) e).callAddRandomArmor(); if (!usingVanillaEnchantingMethod) ((EntityLivingAccessor) e).callEnchantEquipment(); From fca936833b688543af90d0c67a42852d4ed1f91e Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Fri, 14 Apr 2023 20:28:02 +0200 Subject: [PATCH 04/26] hmm --- build.gradle | 1 + src/main/java/kubatech/standalone.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 src/main/java/kubatech/standalone.java diff --git a/build.gradle b/build.gradle index 055dcee4..79d0c0a5 100644 --- a/build.gradle +++ b/build.gradle @@ -856,6 +856,7 @@ def getManifestAttributes() { "ForceLoadAsMod": !containsMixinsAndOrCoreModOnly.toBoolean() ] } + manifestAttributes += ["Main-class": "kubatech.standalone"] return manifestAttributes } diff --git a/src/main/java/kubatech/standalone.java b/src/main/java/kubatech/standalone.java new file mode 100644 index 00000000..4c63a43c --- /dev/null +++ b/src/main/java/kubatech/standalone.java @@ -0,0 +1,15 @@ +package kubatech; + +import javax.swing.*; + +public class standalone { + + public static void main(String[] args) { + JOptionPane.showMessageDialog( + null, + "Get some TEA", + "TEA", + JOptionPane.ERROR_MESSAGE, + new ImageIcon(standalone.class.getResource("/assets/kubatech/textures/gui/green_tea.png"))); + } +} From c7e39d9bb3645951196150a35c84c940ff1eaf67 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Fri, 14 Apr 2023 21:55:22 +0200 Subject: [PATCH 05/26] test generation --- src/main/java/kubatech/CommonProxy.java | 1 + .../kubatech/commands/CommandCustomDrops.java | 67 +++++++++++++ .../kubatech/loaders/MobRecipeLoader.java | 97 +++++++++++++++++++ 3 files changed, 165 insertions(+) create mode 100644 src/main/java/kubatech/commands/CommandCustomDrops.java diff --git a/src/main/java/kubatech/CommonProxy.java b/src/main/java/kubatech/CommonProxy.java index 5abf2996..0fc5308b 100644 --- a/src/main/java/kubatech/CommonProxy.java +++ b/src/main/java/kubatech/CommonProxy.java @@ -69,6 +69,7 @@ public void serverStarting(FMLServerStartingEvent event) { cmd.addCommand(new CommandConfig()); cmd.addCommand(new CommandBees()); cmd.addCommand(new CommandTea()); + cmd.addCommand(new CommandCustomDrops()); event.registerServerCommand(cmd); } diff --git a/src/main/java/kubatech/commands/CommandCustomDrops.java b/src/main/java/kubatech/commands/CommandCustomDrops.java new file mode 100644 index 00000000..88c68569 --- /dev/null +++ b/src/main/java/kubatech/commands/CommandCustomDrops.java @@ -0,0 +1,67 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2023 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.commands; + +import java.io.File; + +import kubatech.loaders.MobRecipeLoader; + +import net.minecraft.client.Minecraft; +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; + +public class CommandCustomDrops extends CommandBase { + + @Override + public String getCommandName() { + return "customdrops"; + } + + @Override + public String getCommandUsage(ICommandSender p_71518_1_) { + return "customdrops"; + } + + @Override + public int getRequiredPermissionLevel() { + return 4; + } + + @Override + public void processCommand(ICommandSender p_71515_1_, String[] p_71515_2_) { + + if (!Minecraft.getMinecraft() + .isSingleplayer()) { + p_71515_1_ + .addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "This command is single-player only!")); + return; + } + + File f = MobRecipeLoader.makeCustomDrops(); + + if (f == null) { + p_71515_1_.addChatMessage( + new ChatComponentText(EnumChatFormatting.RED + "There was an error! Look in the console")); + } else p_71515_1_.addChatMessage(new ChatComponentText(f.getAbsolutePath())); + } +} diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 3d454b73..97023bc4 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -40,6 +40,7 @@ import kubatech.api.helpers.ProgressBarWrapper; import kubatech.api.mobhandler.MobDrop; import kubatech.api.network.LoadConfigPacket; +import kubatech.api.utils.FastRandom; import kubatech.api.utils.GSONUtils; import kubatech.api.utils.ModUtils; import kubatech.api.utils.ModUtils.TriConsumer; @@ -71,8 +72,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; import net.minecraft.util.StatCollector; import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.util.FakePlayer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -85,7 +89,9 @@ import com.google.common.io.Files; import com.google.gson.Gson; +import com.mojang.authlib.GameProfile; +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.util.GT_Utility; @@ -737,6 +743,7 @@ else if (StatCollector.translateToLocal("entity." + k + ".name") droplist superraredrops = new droplist(); droplist additionaldrops = new droplist(); droplist dropslooting = new droplist(); + droplist dropscustom = new droplist(); frand.newRound(); collector.newRound(); @@ -1049,6 +1056,96 @@ else if (StatCollector.translateToLocal("entity." + k + ".name") } } + @SuppressWarnings("UnstableApiUsage") + public static File makeCustomDrops() { + + dropCollector collector = new dropCollector(); + Map customDropsMap = new HashMap<>(); + isInGenerationProcess = true; + + for (Map.Entry mob : GeneralMobList.entrySet()) { + EntityLiving e = mob.getValue().mob; + String k = mob.getKey(); + + // There is high probability that the hooks are using custom random class + // so we are just going to do approximation by calling it 10k times :LoL: + ((EntityAccessor) e).setRand(new FastRandom()); + e.worldObj.isRemote = false; + + FakePlayer fp = new FakePlayer( + FMLCommonHandler.instance() + .getMinecraftServerInstance().worldServers[0], + new GameProfile( + UUID.nameUUIDFromBytes("[MobRecipeLoader]".getBytes(StandardCharsets.UTF_8)), + "[MobRecipeLoader]")); + + droplist dropscustom = new droplist(); + + try { + + for (int i = 0; i < 10000; i++) { + if (ForgeHooks + .onLivingDrops(e, DamageSource.causePlayerDamage(fp), e.capturedDrops, 0, true, 100)) { + LOG.warn("Event onLivingDrops for " + k + " has been cancelled, I am gonna ignore that!"); + break; + } + collector.addDrop(dropscustom, e.capturedDrops, 1.d / 10000.d); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + + e.worldObj.isRemote = true; + + collector.newRound(); + + if (!dropscustom.isEmpty()) { + OverridesConfig.MobOverride override = new OverridesConfig.MobOverride(); + for (dropinstance drop : dropscustom.drops) { + ItemStack stack = drop.stack; + if (stack.hasTagCompound()) stack.stackTagCompound.removeTag(randomEnchantmentDetectedString); + int chance = drop.getchance(10000); + if (chance > 10000) { + int div = (int) Math.ceil(chance / 10000d); + stack.stackSize *= div; + chance /= div; + } + override.additions.add( + new MobDrop( + drop.stack, + MobDrop.DropType.Normal, + chance, + drop.isEnchatmentRandomized ? drop.enchantmentLevel : null, + drop.isDamageRandomized ? drop.damagesPossible : null, + false, + false)); + customDropsMap.put(k, override); + } + } + + } + + Writer writer = null; + Gson gson = GSONUtils.GSON_BUILDER_PRETTY.create(); + File f = new File("CustomDropsMap.json"); + try { + writer = Files.newWriter(f, StandardCharsets.UTF_8); + gson.toJson(customDropsMap, writer); + writer.flush(); + } catch (Exception ex) { + ex.printStackTrace(); + f = null; + } finally { + if (writer != null) try { + writer.close(); + } catch (Exception ignored) {} + } + + isInGenerationProcess = false; + + return f; + } + public static void processMobRecipeMap() { LOG.info("Loading config"); From e0776221ce91d1f3eca23d8363bcf4cec0a86ebc Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Mon, 17 Apr 2023 18:54:30 +0200 Subject: [PATCH 06/26] test --- .../api/helpers/ReflectionHelper.java | 46 ++++++++++++++++++- src/main/java/kubatech/kubatech.java | 15 ++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/main/java/kubatech/api/helpers/ReflectionHelper.java b/src/main/java/kubatech/api/helpers/ReflectionHelper.java index 63fd6bd6..a15d4bd3 100644 --- a/src/main/java/kubatech/api/helpers/ReflectionHelper.java +++ b/src/main/java/kubatech/api/helpers/ReflectionHelper.java @@ -20,9 +20,13 @@ package kubatech.api.helpers; +import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.HashMap; +import java.net.URL; +import java.util.*; +import java.util.jar.JarFile; +import java.util.stream.Collectors; public class ReflectionHelper { @@ -140,4 +144,44 @@ public static T callMethod(Object obj, String methodName, T defaultValue, Ob return defaultValue; } } + + /** + * Gets all classes in a specific package path, works only for jar files. + * Doesn't initialize classes + * + * @param packageName The package name + * @return The classes + */ + public static Collection> getClasses(String packageName) throws IOException, SecurityException { + ClassLoader classLoader = Thread.currentThread() + .getContextClassLoader(); + assert classLoader != null; + String packagePath = packageName.replace('.', '/'); + URL resource = classLoader.getResource(packagePath); + if (resource == null) throw new FileNotFoundException(); + if (!resource.getProtocol() + .equals("jar")) return Collections.emptySet(); + String jarPath = resource.getPath(); + try (JarFile jar = new JarFile(jarPath.substring(5, jarPath.indexOf('!')))) { + return jar.stream() + .filter( + j -> !j.isDirectory() && j.getName() + .startsWith(packagePath) + && j.getName() + .endsWith(".class")) + .map(j -> { + try { + String name = j.getName(); + return Class.forName( + name.replace('/', '.') + .substring(0, name.lastIndexOf(".class")), + false, + classLoader); + } catch (ClassNotFoundException ignored) {} + return null; + }) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + } + } } diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java index 1814abff..d522b6a5 100644 --- a/src/main/java/kubatech/kubatech.java +++ b/src/main/java/kubatech/kubatech.java @@ -22,9 +22,13 @@ import static kubatech.api.enums.ItemList.LegendaryRedTea; +import java.io.IOException; +import java.util.HashSet; import java.util.List; +import java.util.Set; import kubatech.api.enums.ItemList; +import kubatech.api.helpers.ReflectionHelper; import kubatech.api.network.CustomTileEntityPacket; import kubatech.api.network.LoadConfigPacket; @@ -109,6 +113,17 @@ public void displayAllReleventItems(List p_78018_1_) { public void preInit(FMLPreInitializationEvent event) { instance = this; proxy.preInit(event); + String mypackage = this.getClass() + .getPackage() + .getName(); + Set> classes; + try { + classes = new HashSet<>(ReflectionHelper.getClasses(mypackage)); + } catch (IOException e) { + throw new RuntimeException(e); + } + + classes.forEach(c -> LOG.info(c.getName())); } @Mod.EventHandler From fba05bcd2613fec4d3c489dead9dd89c3127e22d Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sun, 23 Apr 2023 12:43:54 +0200 Subject: [PATCH 07/26] client sided --- .../java/kubatech/api/network/CustomTileEntityPacket.java | 2 +- src/main/java/kubatech/api/utils/ModUtils.java | 4 ++++ src/main/java/kubatech/kubatech.java | 8 +++++--- src/main/java/kubatech/loaders/MobRecipeLoader.java | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/kubatech/api/network/CustomTileEntityPacket.java b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java index bc458738..b2800eb6 100644 --- a/src/main/java/kubatech/api/network/CustomTileEntityPacket.java +++ b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java @@ -133,7 +133,7 @@ public static class Handler implements IMessageHandler { diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java index d522b6a5..5eacd060 100644 --- a/src/main/java/kubatech/kubatech.java +++ b/src/main/java/kubatech/kubatech.java @@ -23,10 +23,12 @@ import static kubatech.api.enums.ItemList.LegendaryRedTea; import java.io.IOException; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; +import cpw.mods.fml.common.FMLCommonHandler; import kubatech.api.enums.ItemList; import kubatech.api.helpers.ReflectionHelper; import kubatech.api.network.CustomTileEntityPacket; @@ -116,14 +118,14 @@ public void preInit(FMLPreInitializationEvent event) { String mypackage = this.getClass() .getPackage() .getName(); - Set> classes; + Collection> classes; try { - classes = new HashSet<>(ReflectionHelper.getClasses(mypackage)); + classes = ReflectionHelper.getClasses(mypackage); } catch (IOException e) { throw new RuntimeException(e); } - classes.forEach(c -> LOG.info(c.getName())); + } @Mod.EventHandler diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 97023bc4..98df0129 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -1205,7 +1205,7 @@ public static void processMobRecipeMap() { @SideOnly(Side.CLIENT) public static void processMobRecipeMap(HashSet mobs, HashMap overrides) { - if (isClientSided) Mob_Handler.clearRecipes(); + Mob_Handler.clearRecipes(); MobNameToRecipeMap.clear(); mobs.forEach(k -> { GeneralMappedMob v = GeneralMobList.get(k); From f962516afcf34071fc8c7e6987d5db1b900ce1cd Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 3 Jun 2023 13:58:47 +0200 Subject: [PATCH 08/26] Update CommandCustomDrops.java --- src/main/java/kubatech/commands/CommandCustomDrops.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/kubatech/commands/CommandCustomDrops.java b/src/main/java/kubatech/commands/CommandCustomDrops.java index 88c68569..c9b15fea 100644 --- a/src/main/java/kubatech/commands/CommandCustomDrops.java +++ b/src/main/java/kubatech/commands/CommandCustomDrops.java @@ -22,14 +22,14 @@ import java.io.File; -import kubatech.loaders.MobRecipeLoader; - import net.minecraft.client.Minecraft; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; +import kubatech.loaders.MobRecipeLoader; + public class CommandCustomDrops extends CommandBase { @Override From bc06dae48b1fa5617ddca09743a0317333175607 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 3 Jun 2023 14:02:44 +0200 Subject: [PATCH 09/26] Update MobRecipeLoader.java --- src/main/java/kubatech/loaders/MobRecipeLoader.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 3be8105a..674ee07f 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -61,6 +61,9 @@ import com.google.gson.Gson; import com.mojang.authlib.GameProfile; +import atomicstryker.infernalmobs.common.InfernalMobsCore; +import atomicstryker.infernalmobs.common.MobModifier; +import atomicstryker.infernalmobs.common.mods.api.ModifierLoader; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; From da0062aba0e55cd8b4e71c22e91465b63a228e26 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 3 Jun 2023 14:14:47 +0200 Subject: [PATCH 10/26] Save to static variable --- src/main/java/kubatech/kubatech.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java index 4ffee0f0..5efca6a7 100644 --- a/src/main/java/kubatech/kubatech.java +++ b/src/main/java/kubatech/kubatech.java @@ -107,20 +107,20 @@ public void displayAllReleventItems(List p_78018_1_) { @SidedProxy(clientSide = Tags.MODID + ".ClientProxy", serverSide = Tags.MODID + ".CommonProxy") public static CommonProxy proxy; + private static Collection> myClasses; + @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { instance = this; - proxy.preInit(event); - String mypackage = this.getClass() - .getPackage() - .getName(); - Collection> classes; try { - classes = ReflectionHelper.getClasses(mypackage); + myClasses = ReflectionHelper.getClasses( + this.getClass() + .getPackage() + .getName()); } catch (IOException e) { throw new RuntimeException(e); } - + proxy.preInit(event); } @Mod.EventHandler From 1a1a71f5f9fbfb6627af1b0d43771571701d2014 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 3 Jun 2023 14:17:01 +0200 Subject: [PATCH 11/26] Imports --- src/main/java/kubatech/ClientProxy.java | 10 +++- src/main/java/kubatech/CommonProxy.java | 17 ++++++- .../api/helpers/ReflectionHelper.java | 8 +++- .../java/kubatech/api/utils/GSONUtils.java | 8 +++- .../java/kubatech/api/utils/ModUtils.java | 6 ++- .../client/effect/EntityRenderer.java | 5 +- .../client/effect/MegaApiaryBeesRenderer.java | 4 +- .../java/kubatech/commands/CommandConfig.java | 4 +- .../kubatech/commands/CommandHandler.java | 12 +++-- .../java/kubatech/commands/CommandTea.java | 7 ++- src/main/java/kubatech/kubatech.java | 10 +++- .../java/kubatech/loaders/ItemLoader.java | 44 ++++++++++++++++- .../kubatech/loaders/MobRecipeLoader.java | 14 +++++- .../java/kubatech/loaders/RecipeLoader.java | 30 +++++++++++- .../loaders/item/items/TeaUltimate.java | 8 +++- src/main/java/kubatech/nei/Mob_Handler.java | 24 +++++++++- src/main/java/kubatech/nei/NEI_Config.java | 14 +++++- .../kubatech/tileentity/TeaAcceptorTile.java | 4 +- ...ileEntity_ExtremeExterminationChamber.java | 34 ++++++++++--- ...ileEntity_ExtremeIndustrialGreenhouse.java | 44 ++++++++++++++--- ...T_MetaTileEntity_MegaIndustrialApiary.java | 48 ++++++++++++++++--- 21 files changed, 311 insertions(+), 44 deletions(-) diff --git a/src/main/java/kubatech/ClientProxy.java b/src/main/java/kubatech/ClientProxy.java index 3b5b68ec..99e9661e 100644 --- a/src/main/java/kubatech/ClientProxy.java +++ b/src/main/java/kubatech/ClientProxy.java @@ -20,7 +20,15 @@ package kubatech; -import cpw.mods.fml.common.event.*; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLLoadCompleteEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerAboutToStartEvent; +import cpw.mods.fml.common.event.FMLServerStartedEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import cpw.mods.fml.common.event.FMLServerStoppedEvent; +import cpw.mods.fml.common.event.FMLServerStoppingEvent; import kubatech.api.utils.ModUtils; import kubatech.loaders.MobRecipeLoader; import kubatech.nei.IMCForNEI; diff --git a/src/main/java/kubatech/CommonProxy.java b/src/main/java/kubatech/CommonProxy.java index 5be047f4..cc4ff896 100644 --- a/src/main/java/kubatech/CommonProxy.java +++ b/src/main/java/kubatech/CommonProxy.java @@ -26,9 +26,22 @@ import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.event.*; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLLoadCompleteEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerAboutToStartEvent; +import cpw.mods.fml.common.event.FMLServerStartedEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import cpw.mods.fml.common.event.FMLServerStoppedEvent; +import cpw.mods.fml.common.event.FMLServerStoppingEvent; import kubatech.api.LoaderReference; -import kubatech.commands.*; +import kubatech.commands.CommandBees; +import kubatech.commands.CommandConfig; +import kubatech.commands.CommandCustomDrops; +import kubatech.commands.CommandHandler; +import kubatech.commands.CommandHelp; +import kubatech.commands.CommandTea; import kubatech.config.Config; import kubatech.loaders.MTLoader; import kubatech.loaders.RecipeLoader; diff --git a/src/main/java/kubatech/api/helpers/ReflectionHelper.java b/src/main/java/kubatech/api/helpers/ReflectionHelper.java index a15d4bd3..90e61ec0 100644 --- a/src/main/java/kubatech/api/helpers/ReflectionHelper.java +++ b/src/main/java/kubatech/api/helpers/ReflectionHelper.java @@ -20,11 +20,15 @@ package kubatech.api.helpers; -import java.io.*; +import java.io.FileNotFoundException; +import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.URL; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Objects; import java.util.jar.JarFile; import java.util.stream.Collectors; diff --git a/src/main/java/kubatech/api/utils/GSONUtils.java b/src/main/java/kubatech/api/utils/GSONUtils.java index 71d12d9e..90dd70f0 100644 --- a/src/main/java/kubatech/api/utils/GSONUtils.java +++ b/src/main/java/kubatech/api/utils/GSONUtils.java @@ -30,7 +30,13 @@ import net.minecraft.nbt.NBTSizeTracker; import net.minecraft.nbt.NBTTagCompound; -import com.google.gson.*; +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializer; public class GSONUtils { diff --git a/src/main/java/kubatech/api/utils/ModUtils.java b/src/main/java/kubatech/api/utils/ModUtils.java index 746c5c8f..61352cce 100644 --- a/src/main/java/kubatech/api/utils/ModUtils.java +++ b/src/main/java/kubatech/api/utils/ModUtils.java @@ -22,7 +22,11 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; -import java.util.*; +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; import javax.xml.bind.DatatypeConverter; diff --git a/src/main/java/kubatech/client/effect/EntityRenderer.java b/src/main/java/kubatech/client/effect/EntityRenderer.java index 1db113c5..0691dc07 100644 --- a/src/main/java/kubatech/client/effect/EntityRenderer.java +++ b/src/main/java/kubatech/client/effect/EntityRenderer.java @@ -20,7 +20,10 @@ package kubatech.client.effect; -import static net.minecraft.client.renderer.entity.RenderManager.*; +import static net.minecraft.client.renderer.entity.RenderManager.instance; +import static net.minecraft.client.renderer.entity.RenderManager.renderPosX; +import static net.minecraft.client.renderer.entity.RenderManager.renderPosY; +import static net.minecraft.client.renderer.entity.RenderManager.renderPosZ; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.EntityFX; diff --git a/src/main/java/kubatech/client/effect/MegaApiaryBeesRenderer.java b/src/main/java/kubatech/client/effect/MegaApiaryBeesRenderer.java index 40079f3f..9ac093b6 100644 --- a/src/main/java/kubatech/client/effect/MegaApiaryBeesRenderer.java +++ b/src/main/java/kubatech/client/effect/MegaApiaryBeesRenderer.java @@ -20,7 +20,9 @@ package kubatech.client.effect; -import static net.minecraft.client.renderer.entity.RenderManager.*; +import static net.minecraft.client.renderer.entity.RenderManager.renderPosX; +import static net.minecraft.client.renderer.entity.RenderManager.renderPosY; +import static net.minecraft.client.renderer.entity.RenderManager.renderPosZ; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.EntityFX; diff --git a/src/main/java/kubatech/commands/CommandConfig.java b/src/main/java/kubatech/commands/CommandConfig.java index 6b61a4ca..e4ffe975 100644 --- a/src/main/java/kubatech/commands/CommandConfig.java +++ b/src/main/java/kubatech/commands/CommandConfig.java @@ -20,7 +20,9 @@ package kubatech.commands; -import static kubatech.commands.CommandConfig.Translations.*; +import static kubatech.commands.CommandConfig.Translations.INVALID_OPTION; +import static kubatech.commands.CommandConfig.Translations.SUCCESS; +import static kubatech.commands.CommandConfig.Translations.USAGE; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; diff --git a/src/main/java/kubatech/commands/CommandHandler.java b/src/main/java/kubatech/commands/CommandHandler.java index 8003ac39..0daea862 100644 --- a/src/main/java/kubatech/commands/CommandHandler.java +++ b/src/main/java/kubatech/commands/CommandHandler.java @@ -20,9 +20,15 @@ package kubatech.commands; -import static kubatech.commands.CommandHandler.Translations.*; - -import java.util.*; +import static kubatech.commands.CommandHandler.Translations.CANT_FIND; +import static kubatech.commands.CommandHandler.Translations.GENERIC_HELP; +import static kubatech.commands.CommandHandler.Translations.INVALID; +import static kubatech.commands.CommandHandler.Translations.USAGE; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommand; diff --git a/src/main/java/kubatech/commands/CommandTea.java b/src/main/java/kubatech/commands/CommandTea.java index 48e1b110..70a924d9 100644 --- a/src/main/java/kubatech/commands/CommandTea.java +++ b/src/main/java/kubatech/commands/CommandTea.java @@ -20,7 +20,12 @@ package kubatech.commands; -import static kubatech.commands.CommandTea.Translations.*; +import static kubatech.commands.CommandTea.Translations.INVALID_OPTION; +import static kubatech.commands.CommandTea.Translations.PLAYER_NOT_FOUND; +import static kubatech.commands.CommandTea.Translations.SUCCESS_ADD; +import static kubatech.commands.CommandTea.Translations.SUCCESS_GET; +import static kubatech.commands.CommandTea.Translations.SUCCESS_SET; +import static kubatech.commands.CommandTea.Translations.USAGE; import java.math.BigInteger; import java.util.UUID; diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java index 5efca6a7..31d5bf99 100644 --- a/src/main/java/kubatech/kubatech.java +++ b/src/main/java/kubatech/kubatech.java @@ -35,7 +35,15 @@ import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; -import cpw.mods.fml.common.event.*; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLLoadCompleteEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerAboutToStartEvent; +import cpw.mods.fml.common.event.FMLServerStartedEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import cpw.mods.fml.common.event.FMLServerStoppedEvent; +import cpw.mods.fml.common.event.FMLServerStoppingEvent; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.relauncher.Side; import kubatech.api.enums.ItemList; diff --git a/src/main/java/kubatech/loaders/ItemLoader.java b/src/main/java/kubatech/loaders/ItemLoader.java index 03af96a4..5c3ec6cc 100644 --- a/src/main/java/kubatech/loaders/ItemLoader.java +++ b/src/main/java/kubatech/loaders/ItemLoader.java @@ -20,12 +20,52 @@ package kubatech.loaders; -import static kubatech.api.enums.ItemList.*; +import static kubatech.api.enums.ItemList.Beeeeee; +import static kubatech.api.enums.ItemList.BlackTea; +import static kubatech.api.enums.ItemList.BlackTeaLeaf; +import static kubatech.api.enums.ItemList.BruisedTeaLeaf; +import static kubatech.api.enums.ItemList.EarlGrayTea; +import static kubatech.api.enums.ItemList.FermentedTeaLeaf; +import static kubatech.api.enums.ItemList.GreenTea; +import static kubatech.api.enums.ItemList.GreenTeaLeaf; +import static kubatech.api.enums.ItemList.LegendaryBlackTea; +import static kubatech.api.enums.ItemList.LegendaryButterflyTea; +import static kubatech.api.enums.ItemList.LegendaryEarlGrayTea; +import static kubatech.api.enums.ItemList.LegendaryGreenTea; +import static kubatech.api.enums.ItemList.LegendaryLemonTea; +import static kubatech.api.enums.ItemList.LegendaryMilkTea; +import static kubatech.api.enums.ItemList.LegendaryOolongTea; +import static kubatech.api.enums.ItemList.LegendaryPeppermintTea; +import static kubatech.api.enums.ItemList.LegendaryPuerhTea; +import static kubatech.api.enums.ItemList.LegendaryRedTea; +import static kubatech.api.enums.ItemList.LegendaryUltimateTea; +import static kubatech.api.enums.ItemList.LegendaryWhiteTea; +import static kubatech.api.enums.ItemList.LegendaryYellowTea; +import static kubatech.api.enums.ItemList.LemonTea; +import static kubatech.api.enums.ItemList.MilkTea; +import static kubatech.api.enums.ItemList.OolongTea; +import static kubatech.api.enums.ItemList.OolongTeaLeaf; +import static kubatech.api.enums.ItemList.OxidizedTeaLeaf; +import static kubatech.api.enums.ItemList.PartiallyOxidizedTeaLeaf; +import static kubatech.api.enums.ItemList.PeppermintTea; +import static kubatech.api.enums.ItemList.PuerhTea; +import static kubatech.api.enums.ItemList.PuerhTeaLeaf; +import static kubatech.api.enums.ItemList.RolledTeaLeaf; +import static kubatech.api.enums.ItemList.SteamedTeaLeaf; +import static kubatech.api.enums.ItemList.TeaAcceptorResearchNote; +import static kubatech.api.enums.ItemList.TeaLeafDehydrated; +import static kubatech.api.enums.ItemList.WhiteTea; +import static kubatech.api.enums.ItemList.WhiteTeaLeaf; +import static kubatech.api.enums.ItemList.YellowTea; +import static kubatech.api.enums.ItemList.YellowTeaLeaf; import cpw.mods.fml.common.registry.GameRegistry; import kubatech.loaders.item.ItemProxy; import kubatech.loaders.item.KubaItems; -import kubatech.loaders.item.items.*; +import kubatech.loaders.item.items.Tea; +import kubatech.loaders.item.items.TeaCollection; +import kubatech.loaders.item.items.TeaIngredient; +import kubatech.loaders.item.items.TeaUltimate; public class ItemLoader { diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 674ee07f..165497d3 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -22,14 +22,24 @@ import static kubatech.api.utils.ModUtils.isClientSided; import static kubatech.api.utils.ModUtils.isDeobfuscatedEnvironment; -import static kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber.*; +import static kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber.DIAMOND_SPIKES_DAMAGE; +import static kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber.MOB_SPAWN_INTERVAL; +import static kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber.MobNameToRecipeMap; import java.io.File; import java.io.Reader; import java.io.Writer; import java.lang.reflect.Modifier; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.UUID; import java.util.function.Supplier; import java.util.stream.Collectors; diff --git a/src/main/java/kubatech/loaders/RecipeLoader.java b/src/main/java/kubatech/loaders/RecipeLoader.java index 4eb196a9..acc2f89b 100644 --- a/src/main/java/kubatech/loaders/RecipeLoader.java +++ b/src/main/java/kubatech/loaders/RecipeLoader.java @@ -20,7 +20,35 @@ package kubatech.loaders; -import static kubatech.api.enums.ItemList.*; +import static kubatech.api.enums.ItemList.BlackTea; +import static kubatech.api.enums.ItemList.BlackTeaLeaf; +import static kubatech.api.enums.ItemList.BruisedTeaLeaf; +import static kubatech.api.enums.ItemList.EarlGrayTea; +import static kubatech.api.enums.ItemList.ExtremeExterminationChamber; +import static kubatech.api.enums.ItemList.ExtremeIndustrialApiary; +import static kubatech.api.enums.ItemList.ExtremeIndustrialGreenhouse; +import static kubatech.api.enums.ItemList.FermentedTeaLeaf; +import static kubatech.api.enums.ItemList.GreenTea; +import static kubatech.api.enums.ItemList.GreenTeaLeaf; +import static kubatech.api.enums.ItemList.LegendaryUltimateTea; +import static kubatech.api.enums.ItemList.LemonTea; +import static kubatech.api.enums.ItemList.MilkTea; +import static kubatech.api.enums.ItemList.OolongTea; +import static kubatech.api.enums.ItemList.OolongTeaLeaf; +import static kubatech.api.enums.ItemList.OxidizedTeaLeaf; +import static kubatech.api.enums.ItemList.PartiallyOxidizedTeaLeaf; +import static kubatech.api.enums.ItemList.PeppermintTea; +import static kubatech.api.enums.ItemList.PuerhTea; +import static kubatech.api.enums.ItemList.PuerhTeaLeaf; +import static kubatech.api.enums.ItemList.RolledTeaLeaf; +import static kubatech.api.enums.ItemList.SteamedTeaLeaf; +import static kubatech.api.enums.ItemList.TeaAcceptor; +import static kubatech.api.enums.ItemList.TeaAcceptorResearchNote; +import static kubatech.api.enums.ItemList.TeaLeafDehydrated; +import static kubatech.api.enums.ItemList.WhiteTea; +import static kubatech.api.enums.ItemList.WhiteTeaLeaf; +import static kubatech.api.enums.ItemList.YellowTea; +import static kubatech.api.enums.ItemList.YellowTeaLeaf; import java.lang.reflect.InvocationTargetException; diff --git a/src/main/java/kubatech/loaders/item/items/TeaUltimate.java b/src/main/java/kubatech/loaders/item/items/TeaUltimate.java index db34f9e1..bad26bdb 100644 --- a/src/main/java/kubatech/loaders/item/items/TeaUltimate.java +++ b/src/main/java/kubatech/loaders/item/items/TeaUltimate.java @@ -44,7 +44,13 @@ import com.gtnewhorizons.modularui.api.math.Color; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.*; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicTextWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; +import com.gtnewhorizons.modularui.common.widget.TabButton; +import com.gtnewhorizons.modularui.common.widget.TabContainer; +import com.gtnewhorizons.modularui.common.widget.TextWidget; import codechicken.nei.NEIClientUtils; import kubatech.api.enums.ItemList; diff --git a/src/main/java/kubatech/nei/Mob_Handler.java b/src/main/java/kubatech/nei/Mob_Handler.java index 3dd9bb5e..f6e859ec 100644 --- a/src/main/java/kubatech/nei/Mob_Handler.java +++ b/src/main/java/kubatech/nei/Mob_Handler.java @@ -20,7 +20,22 @@ package kubatech.nei; -import static kubatech.nei.Mob_Handler.Translations.*; +import static kubatech.nei.Mob_Handler.Translations.ADDITIONAL_DROPS; +import static kubatech.nei.Mob_Handler.Translations.AVERAGE_REMINDER; +import static kubatech.nei.Mob_Handler.Translations.BOSS; +import static kubatech.nei.Mob_Handler.Translations.CANNOT_USE_VIAL; +import static kubatech.nei.Mob_Handler.Translations.CHANCE; +import static kubatech.nei.Mob_Handler.Translations.EEC_CHANCE; +import static kubatech.nei.Mob_Handler.Translations.INFERNAL_ALWAYS; +import static kubatech.nei.Mob_Handler.Translations.INFERNAL_CAN; +import static kubatech.nei.Mob_Handler.Translations.INFERNAL_CANNOT; +import static kubatech.nei.Mob_Handler.Translations.INFERNAL_DROPS; +import static kubatech.nei.Mob_Handler.Translations.LOOTABLE; +import static kubatech.nei.Mob_Handler.Translations.MAX_HEALTH; +import static kubatech.nei.Mob_Handler.Translations.MOD; +import static kubatech.nei.Mob_Handler.Translations.NORMAL_DROPS; +import static kubatech.nei.Mob_Handler.Translations.PLAYER_ONLY; +import static kubatech.nei.Mob_Handler.Translations.RARE_DROPS; import java.awt.*; import java.lang.reflect.Field; @@ -58,7 +73,12 @@ import codechicken.lib.gui.GuiDraw; import codechicken.nei.NEIClientUtils; import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.*; +import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.GuiRecipe; +import codechicken.nei.recipe.GuiUsageRecipe; +import codechicken.nei.recipe.IUsageHandler; +import codechicken.nei.recipe.RecipeCatalysts; +import codechicken.nei.recipe.TemplateRecipeHandler; import cpw.mods.fml.common.event.FMLInterModComms; import crazypants.enderio.EnderIO; import crazypants.enderio.machine.spawner.BlockPoweredSpawner; diff --git a/src/main/java/kubatech/nei/NEI_Config.java b/src/main/java/kubatech/nei/NEI_Config.java index 48540534..3836c054 100644 --- a/src/main/java/kubatech/nei/NEI_Config.java +++ b/src/main/java/kubatech/nei/NEI_Config.java @@ -20,7 +20,19 @@ package kubatech.nei; -import static kubatech.api.enums.ItemList.*; +import static kubatech.api.enums.ItemList.LegendaryBlackTea; +import static kubatech.api.enums.ItemList.LegendaryButterflyTea; +import static kubatech.api.enums.ItemList.LegendaryEarlGrayTea; +import static kubatech.api.enums.ItemList.LegendaryGreenTea; +import static kubatech.api.enums.ItemList.LegendaryLemonTea; +import static kubatech.api.enums.ItemList.LegendaryMilkTea; +import static kubatech.api.enums.ItemList.LegendaryOolongTea; +import static kubatech.api.enums.ItemList.LegendaryPeppermintTea; +import static kubatech.api.enums.ItemList.LegendaryPuerhTea; +import static kubatech.api.enums.ItemList.LegendaryRedTea; +import static kubatech.api.enums.ItemList.LegendaryUltimateTea; +import static kubatech.api.enums.ItemList.LegendaryWhiteTea; +import static kubatech.api.enums.ItemList.LegendaryYellowTea; import codechicken.nei.api.API; import codechicken.nei.api.IConfigureNEI; diff --git a/src/main/java/kubatech/tileentity/TeaAcceptorTile.java b/src/main/java/kubatech/tileentity/TeaAcceptorTile.java index 8ba7401b..a2952117 100644 --- a/src/main/java/kubatech/tileentity/TeaAcceptorTile.java +++ b/src/main/java/kubatech/tileentity/TeaAcceptorTile.java @@ -39,7 +39,9 @@ import com.gtnewhorizons.modularui.api.drawable.Text; import com.gtnewhorizons.modularui.api.math.Color; import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.*; +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.api.widget.Widget; import com.gtnewhorizons.modularui.common.builder.UIInfo; import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java index 19ca563a..fcaf2a83 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java @@ -20,15 +20,30 @@ package kubatech.tileentity.gregtech.multiblock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.Textures.BlockIcons.*; -import static gregtech.api.util.GT_StructureUtility.*; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GT_HatchElement.Energy; +import static gregtech.api.enums.GT_HatchElement.InputBus; +import static gregtech.api.enums.GT_HatchElement.Maintenance; +import static gregtech.api.enums.GT_HatchElement.OutputBus; +import static gregtech.api.enums.GT_HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; +import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; +import static gregtech.api.util.GT_StructureUtility.ofFrame; import static kubatech.api.Variables.Author; import static kubatech.api.Variables.StructureHologram; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Random; +import java.util.UUID; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; @@ -69,7 +84,14 @@ import com.gtnewhorizons.modularui.api.math.Pos2d; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.*; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; +import com.gtnewhorizons.modularui.common.widget.DynamicTextWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; import com.mojang.authlib.GameProfile; import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java index de23f017..4b86cda1 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java @@ -20,15 +20,29 @@ package kubatech.tileentity.gregtech.multiblock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.Textures.BlockIcons.*; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; import static kubatech.api.Variables.Author; import static kubatech.api.Variables.StructureHologram; import java.io.IOException; import java.lang.ref.WeakReference; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -42,7 +56,11 @@ import net.minecraft.init.Items; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.Slot; -import net.minecraft.item.*; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemSeedFood; +import net.minecraft.item.ItemSeeds; +import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; import net.minecraft.nbt.NBTTagCompound; @@ -73,7 +91,18 @@ import com.gtnewhorizons.modularui.api.widget.Widget; import com.gtnewhorizons.modularui.common.builder.UIInfo; import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; -import com.gtnewhorizons.modularui.common.widget.*; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.ChangeableWidget; +import com.gtnewhorizons.modularui.common.widget.Column; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; +import com.gtnewhorizons.modularui.common.widget.DynamicTextWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.Scrollable; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @@ -87,7 +116,10 @@ import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.*; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import gregtech.api.util.GT_Utility; diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java index c42250df..6aa52a56 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java @@ -20,16 +20,33 @@ package kubatech.tileentity.gregtech.multiblock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksMap; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; import static forestry.api.apiculture.BeeManager.beeRoot; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.enums.GT_HatchElement.Energy; +import static gregtech.api.enums.GT_HatchElement.InputBus; +import static gregtech.api.enums.GT_HatchElement.Maintenance; +import static gregtech.api.enums.GT_HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static kubatech.api.Variables.*; +import static kubatech.api.Variables.StructureHologram; +import static kubatech.api.Variables.buildAuthorList; import java.io.IOException; import java.lang.ref.WeakReference; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -66,11 +83,28 @@ import com.gtnewhorizons.modularui.api.widget.Widget; import com.gtnewhorizons.modularui.common.builder.UIInfo; import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; -import com.gtnewhorizons.modularui.common.widget.*; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.ChangeableWidget; +import com.gtnewhorizons.modularui.common.widget.Column; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; +import com.gtnewhorizons.modularui.common.widget.DynamicTextWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.Scrollable; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.apiculture.*; +import forestry.api.apiculture.EnumBeeType; +import forestry.api.apiculture.FlowerManager; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.apiculture.IBeekeepingMode; import forestry.apiculture.blocks.BlockAlveary; import forestry.apiculture.blocks.BlockApicultureType; import forestry.apiculture.genetics.Bee; From 542776eef47ff47edbb4372a051b9857b3009283 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 3 Jun 2023 14:32:41 +0200 Subject: [PATCH 12/26] Log message --- src/main/java/kubatech/kubatech.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java index 31d5bf99..4eebab8b 100644 --- a/src/main/java/kubatech/kubatech.java +++ b/src/main/java/kubatech/kubatech.java @@ -120,6 +120,7 @@ public void displayAllReleventItems(List p_78018_1_) { @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { instance = this; + final long timeStart = System.currentTimeMillis(); try { myClasses = ReflectionHelper.getClasses( this.getClass() @@ -128,6 +129,8 @@ public void preInit(FMLPreInitializationEvent event) { } catch (IOException e) { throw new RuntimeException(e); } + final long timeToLoad = System.currentTimeMillis() - timeStart; + info("Class discovery took " + timeToLoad + "ms !"); proxy.preInit(event); } From b95e2fe2334e498383c46c51a38053cddd3c2bfd Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 3 Jun 2023 15:13:29 +0200 Subject: [PATCH 13/26] Convert InfernalHelper to mixin accessors --- dependencies.gradle | 38 ++- .../kubatech/api/helpers/InfernalHelper.java | 231 ------------------ .../kubatech/loaders/MobRecipeLoader.java | 182 +++++++------- src/main/java/kubatech/mixin/Mixin.java | 4 + src/main/java/kubatech/mixin/TargetedMod.java | 5 +- .../InfernalMobsCoreAccessor.java | 57 +++++ src/main/java/kubatech/nei/Mob_Handler.java | 8 +- 7 files changed, 203 insertions(+), 322 deletions(-) delete mode 100644 src/main/java/kubatech/api/helpers/InfernalHelper.java create mode 100644 src/main/java/kubatech/mixin/mixins/InfernalMobs/InfernalMobsCoreAccessor.java diff --git a/dependencies.gradle b/dependencies.gradle index 53863483..aa50deb2 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,12 +1,46 @@ -// Add your dependencies here +/* + * Add your dependencies here. Supported configurations: + * - api("group:name:version:classifier"): if you use the types from this dependency in the public API of this mod + * Available at runtime and compiletime for mods depending on this mod + * - implementation("g:n:v:c"): if you need this for internal implementation details of the mod, but none of it is visible via the public API + * Available at runtime but not compiletime for mods depending on this mod + * - compileOnly("g:n:v:c"): if the mod you're building doesn't need this dependency during runtime at all, e.g. for optional mods + * Not available at all for mods depending on this mod, only visible at compiletime for this mod + * - compileOnlyApi("g:n:v:c"): like compileOnly, but also visible at compiletime for mods depending on this mod + * Available at compiletime but not runtime for mods depending on this mod + * - runtimeOnlyNonPublishable("g:n:v:c"): if you want to include a mod in this mod's runClient/runServer runs, but not publish it as a dependency + * Not available at all for mods depending on this mod, only visible at runtime for this mod + * - devOnlyNonPublishable("g:n:v:c"): a combination of runtimeOnlyNonPublishable and compileOnly for dependencies present at both compiletime and runtime, + * but not published as Maven dependencies - useful for RFG-deobfuscated dependencies or local testing + * - runtimeOnly("g:n:v:c"): if you don't need this at compile time, but want it to be present at runtime + * Available at runtime for mods depending on this mod + * - annotationProcessor("g:n:v:c"): mostly for java compiler plugins, if you know you need this, use it, otherwise don't worry + * - testCONFIG("g:n:v:c") - replace CONFIG by one of the above (except api), same as above but for the test sources instead of main + * + * - shadowImplementation("g:n:v:c"): effectively the same as API, but the dependency is included in your jar under a renamed package name + * Requires you to enable usesShadowedDependencies in gradle.properties + * + * - compile("g:n:v:c"): deprecated, replace with "api" (works like the old "compile") or "implementation" (can be more efficient) + * + * You can exclude transitive dependencies (dependencies of the chosen dependency) by appending { transitive = false } if needed, + * but use this sparingly as it can break using your mod as another mod's dependency if you're not careful. + * + * To depend on obfuscated jars you can use `devOnlyNonPublishable(rfg.deobf("dep:spec:1.2.3"))` to fetch an obfuscated jar from maven, + * or `devOnlyNonPublishable(rfg.deobf(project.files("libs/my-mod-jar.jar")))` to use a file. + * + * Gradle names for some of the configuration can be misleading, compileOnlyApi and runtimeOnly both get published as dependencies in Maven, but compileOnly does not. + * The buildscript adds runtimeOnlyNonPublishable to also have a runtime dependency that's not published. + * + * For more details, see https://docs.gradle.org/8.0.1/userguide/java_library_plugin.html#sec:java_library_configurations_graph + */ dependencies { api('com.github.GTNewHorizons:GT5-Unofficial:5.09.43.07:dev') api("com.github.GTNewHorizons:EnderCore:0.2.13:dev") api("com.github.GTNewHorizons:EnderIO:2.4.11:dev") - api("com.github.GTNewHorizons:Infernal-Mobs:1.7.8-GTNH:dev") api("com.github.GTNewHorizons:ForestryMC:4.6.7:dev") api("com.github.GTNewHorizons:ModularUI:1.1.2:dev") + devOnlyNonPublishable("com.github.GTNewHorizons:Infernal-Mobs:1.7.8-GTNH:dev") //compileOnly("curse.maven:extrautilities-225561:2264384") { // transitive = false //} diff --git a/src/main/java/kubatech/api/helpers/InfernalHelper.java b/src/main/java/kubatech/api/helpers/InfernalHelper.java deleted file mode 100644 index e3c0db45..00000000 --- a/src/main/java/kubatech/api/helpers/InfernalHelper.java +++ /dev/null @@ -1,231 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2023 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.api.helpers; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -import atomicstryker.infernalmobs.common.InfernalMobsCore; -import atomicstryker.infernalmobs.common.mods.api.ModifierLoader; - -@SuppressWarnings("unchecked") -public class InfernalHelper { - - private static Method isClassAllowed = null; - - public static boolean isClassAllowed(EntityLivingBase e) { - try { - if (isClassAllowed == null) { - isClassAllowed = InfernalMobsCore.class.getDeclaredMethod("isClassAllowed", EntityLivingBase.class); - isClassAllowed.setAccessible(true); - } - return (boolean) isClassAllowed.invoke(InfernalMobsCore.instance(), e); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return false; - } - - private static Method checkEntityClassForced = null; - - public static boolean checkEntityClassForced(EntityLivingBase e) { - try { - if (checkEntityClassForced == null) { - checkEntityClassForced = InfernalMobsCore.class - .getDeclaredMethod("checkEntityClassForced", EntityLivingBase.class); - checkEntityClassForced.setAccessible(true); - } - return (boolean) checkEntityClassForced.invoke(InfernalMobsCore.instance(), e); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return false; - } - - private static Field modifierLoaders = null; - - public static ArrayList> getModifierLoaders() { - try { - if (modifierLoaders == null) { - modifierLoaders = InfernalMobsCore.class.getDeclaredField("modifierLoaders"); - modifierLoaders.setAccessible(true); - } - return (ArrayList>) modifierLoaders.get(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return new ArrayList<>(); - } - - private static Field eliteRarity; - - public static int getEliteRarity() { - try { - if (eliteRarity == null) { - eliteRarity = InfernalMobsCore.class.getDeclaredField("eliteRarity"); - eliteRarity.setAccessible(true); - } - return eliteRarity.getInt(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return 15; - } - - private static Field ultraRarity; - - public static int getUltraRarity() { - try { - if (ultraRarity == null) { - ultraRarity = InfernalMobsCore.class.getDeclaredField("ultraRarity"); - ultraRarity.setAccessible(true); - } - return ultraRarity.getInt(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return 15; - } - - private static Field infernoRarity; - - public static int getInfernoRarity() { - try { - if (infernoRarity == null) { - infernoRarity = InfernalMobsCore.class.getDeclaredField("infernoRarity"); - infernoRarity.setAccessible(true); - } - return infernoRarity.getInt(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return 15; - } - - private static Field minEliteModifiers; - - public static int getMinEliteModifiers() { - try { - if (minEliteModifiers == null) { - minEliteModifiers = InfernalMobsCore.class.getDeclaredField("minEliteModifiers"); - minEliteModifiers.setAccessible(true); - } - return minEliteModifiers.getInt(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return 15; - } - - private static Field minUltraModifiers; - - public static int getMinUltraModifiers() { - try { - if (minUltraModifiers == null) { - minUltraModifiers = InfernalMobsCore.class.getDeclaredField("minUltraModifiers"); - minUltraModifiers.setAccessible(true); - } - return minUltraModifiers.getInt(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return 15; - } - - private static Field minInfernoModifiers; - - public static int getMinInfernoModifiers() { - try { - if (minInfernoModifiers == null) { - minInfernoModifiers = InfernalMobsCore.class.getDeclaredField("minInfernoModifiers"); - minInfernoModifiers.setAccessible(true); - } - return minInfernoModifiers.getInt(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return 15; - } - - private static Field dimensionBlackList; - - public static ArrayList getDimensionBlackList() { - try { - if (dimensionBlackList == null) { - dimensionBlackList = InfernalMobsCore.class.getDeclaredField("dimensionBlackList"); - dimensionBlackList.setAccessible(true); - } - return (ArrayList) dimensionBlackList.get(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return new ArrayList<>(); - } - - private static Field dropIdListElite; - - public static ArrayList getDropIdListElite() { - try { - if (dropIdListElite == null) { - dropIdListElite = InfernalMobsCore.class.getDeclaredField("dropIdListElite"); - dropIdListElite.setAccessible(true); - } - return (ArrayList) dropIdListElite.get(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return new ArrayList<>(); - } - - private static Field dropIdListUltra; - - public static ArrayList getDropIdListUltra() { - try { - if (dropIdListUltra == null) { - dropIdListUltra = InfernalMobsCore.class.getDeclaredField("dropIdListUltra"); - dropIdListUltra.setAccessible(true); - } - return (ArrayList) dropIdListUltra.get(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return new ArrayList<>(); - } - - private static Field dropIdListInfernal; - - public static ArrayList getDropIdListInfernal() { - try { - if (dropIdListInfernal == null) { - dropIdListInfernal = InfernalMobsCore.class.getDeclaredField("dropIdListInfernal"); - dropIdListInfernal.setAccessible(true); - } - return (ArrayList) dropIdListInfernal.get(InfernalMobsCore.instance()); - } catch (Throwable exception) { - exception.printStackTrace(); - } - return new ArrayList<>(); - } -} diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 165497d3..9d287f46 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -82,7 +82,6 @@ import kubatech.Tags; import kubatech.api.LoaderReference; import kubatech.api.helpers.EnderIOHelper; -import kubatech.api.helpers.InfernalHelper; import kubatech.api.helpers.ProgressBarWrapper; import kubatech.api.mobhandler.MobDrop; import kubatech.api.network.LoadConfigPacket; @@ -92,6 +91,7 @@ import kubatech.api.utils.ModUtils.TriConsumer; import kubatech.config.Config; import kubatech.config.OverridesConfig; +import kubatech.mixin.mixins.InfernalMobs.InfernalMobsCoreAccessor; import kubatech.mixin.mixins.minecraft.EntityAccessor; import kubatech.mixin.mixins.minecraft.EntityLivingAccessor; import kubatech.mixin.mixins.minecraft.EntityLivingBaseAccessor; @@ -164,57 +164,65 @@ public static MobRecipe generateMobRecipe(EntityLiving e, String entityID, Array @SuppressWarnings("unchecked") private MobRecipe(EntityLiving e, String entityID, ArrayList outputs) { - if (infernaldrops == null && LoaderReference.InfernalMobs) { - infernaldrops = new droplist(); - LOG.info("Generating Infernal drops"); - ArrayList> modifierLoaders = (ArrayList>) InfernalHelper - .getModifierLoaders() - .clone(); - int i = 0; - for (ModifierLoader modifierLoader : modifierLoaders) { - MobModifier nextMod = modifierLoader.make(null); - if (nextMod.getBlackListMobClasses() != null) - for (Class cl : nextMod.getBlackListMobClasses()) if (e.getClass() - .isAssignableFrom(cl)) break; - i++; - } - if (i > 0) { - double chance = InfernalHelper.checkEntityClassForced(e) ? 1d - : (1d / InfernalHelper.getEliteRarity()); - ArrayList elitelist = InfernalHelper.getDropIdListElite(); - for (ItemStack stack : elitelist) { - dropinstance instance = infernaldrops - .add(new dropinstance(stack.copy(), infernaldrops), chance / elitelist.size()); - instance.isEnchatmentRandomized = true; - // noinspection ConstantConditions - instance.enchantmentLevel = stack.getItem() - .getItemEnchantability(); + if (LoaderReference.InfernalMobs) { + InfernalMobsCoreAccessor infernalMobsCore = (InfernalMobsCoreAccessor) InfernalMobsCore.instance(); + if (infernaldrops == null) { + infernaldrops = new droplist(); + LOG.info("Generating Infernal drops"); + ArrayList> modifierLoaders = (ArrayList>) infernalMobsCore + .getModifierLoaders() + .clone(); + int i = 0; + for (ModifierLoader modifierLoader : modifierLoaders) { + MobModifier nextMod = modifierLoader.make(null); + if (nextMod.getBlackListMobClasses() != null) + for (Class cl : nextMod.getBlackListMobClasses()) if (e.getClass() + .isAssignableFrom(cl)) break; + i++; } - ArrayList ultralist = InfernalHelper.getDropIdListUltra(); - chance *= 1d / InfernalHelper.getUltraRarity(); - for (ItemStack stack : ultralist) { - dropinstance instance = infernaldrops - .add(new dropinstance(stack.copy(), infernaldrops), chance / ultralist.size()); - instance.isEnchatmentRandomized = true; - // noinspection ConstantConditions - instance.enchantmentLevel = stack.getItem() - .getItemEnchantability(); - } - ArrayList infernallist = InfernalHelper.getDropIdListInfernal(); - chance *= 1d / InfernalHelper.getInfernoRarity(); - for (ItemStack stack : infernallist) { - dropinstance instance = infernaldrops - .add(new dropinstance(stack.copy(), infernaldrops), chance / infernallist.size()); - instance.isEnchatmentRandomized = true; - // noinspection ConstantConditions - instance.enchantmentLevel = stack.getItem() - .getItemEnchantability(); + if (i > 0) { + double chance = infernalMobsCore.callCheckEntityClassForced(e) ? 1d + : (1d / infernalMobsCore.getEliteRarity()); + ArrayList elitelist = infernalMobsCore.getDropIdListElite(); + for (ItemStack stack : elitelist) { + dropinstance instance = infernaldrops + .add(new dropinstance(stack.copy(), infernaldrops), chance / elitelist.size()); + instance.isEnchatmentRandomized = true; + // noinspection ConstantConditions + instance.enchantmentLevel = stack.getItem() + .getItemEnchantability(); + } + ArrayList ultralist = infernalMobsCore.getDropIdListUltra(); + chance *= 1d / infernalMobsCore.getUltraRarity(); + for (ItemStack stack : ultralist) { + dropinstance instance = infernaldrops + .add(new dropinstance(stack.copy(), infernaldrops), chance / ultralist.size()); + instance.isEnchatmentRandomized = true; + // noinspection ConstantConditions + instance.enchantmentLevel = stack.getItem() + .getItemEnchantability(); + } + ArrayList infernallist = infernalMobsCore.getDropIdListInfernal(); + chance *= 1d / infernalMobsCore.getInfernoRarity(); + for (ItemStack stack : infernallist) { + dropinstance instance = infernaldrops + .add(new dropinstance(stack.copy(), infernaldrops), chance / infernallist.size()); + instance.isEnchatmentRandomized = true; + // noinspection ConstantConditions + instance.enchantmentLevel = stack.getItem() + .getItemEnchantability(); + } } } - } else if (infernaldrops == null) infernaldrops = new droplist(); + infernalityAllowed = infernalMobsCore.callIsClassAllowed(e); + alwaysinfernal = infernalMobsCore.callCheckEntityClassForced(e); + } else { + infernalityAllowed = false; + alwaysinfernal = false; + } + + if (infernaldrops == null) infernaldrops = new droplist(); - infernalityAllowed = InfernalHelper.isClassAllowed(e); - alwaysinfernal = InfernalHelper.checkEntityClassForced(e); isPeacefulAllowed = !(e instanceof IMob); mOutputs = (ArrayList) outputs.clone(); @@ -272,44 +280,48 @@ public ItemStack[] generateOutputs(Random rnd, GT_MetaTileEntity_ExtremeExtermin } } - if (infernalityAllowed && mEUt * 8 < MTE.getMaxInputVoltage() - && !InfernalHelper.getDimensionBlackList() - .contains( - MTE.getBaseMetaTileEntity() - .getWorld().provider.dimensionId)) { - int p = 0; - int mods = 0; - if (alwaysinfernal || (preferInfernalDrops && rnd.nextInt(InfernalHelper.getEliteRarity()) == 0)) { - p = 1; - if (rnd.nextInt(InfernalHelper.getUltraRarity()) == 0) { - p = 2; - if (rnd.nextInt(InfernalHelper.getInfernoRarity()) == 0) p = 3; + if (LoaderReference.InfernalMobs) { + InfernalMobsCoreAccessor infernalMobsCore = (InfernalMobsCoreAccessor) InfernalMobsCore.instance(); + if (infernalityAllowed && mEUt * 8 < MTE.getMaxInputVoltage() + && !infernalMobsCore.getDimensionBlackList() + .contains( + MTE.getBaseMetaTileEntity() + .getWorld().provider.dimensionId)) { + int p = 0; + int mods = 0; + if (alwaysinfernal + || (preferInfernalDrops && rnd.nextInt(infernalMobsCore.getEliteRarity()) == 0)) { + p = 1; + if (rnd.nextInt(infernalMobsCore.getUltraRarity()) == 0) { + p = 2; + if (rnd.nextInt(infernalMobsCore.getInfernoRarity()) == 0) p = 3; + } + } + ArrayList infernalstacks = null; + if (p > 0) if (p == 1) { + infernalstacks = infernalMobsCore.getDropIdListElite(); + mods = infernalMobsCore.getMinEliteModifiers(); + } else if (p == 2) { + infernalstacks = infernalMobsCore.getDropIdListUltra(); + mods = infernalMobsCore.getMinUltraModifiers(); + } else { + infernalstacks = infernalMobsCore.getDropIdListInfernal(); + mods = infernalMobsCore.getMinInfernoModifiers(); + } + if (infernalstacks != null) { + ItemStack infernalstack = infernalstacks.get(rnd.nextInt(infernalstacks.size())) + .copy(); + // noinspection ConstantConditions + EnchantmentHelper.addRandomEnchantment( + rnd, + infernalstack, + infernalstack.getItem() + .getItemEnchantability()); + stacks.add(infernalstack); + MTE.lEUt *= 8L; + MTE.mMaxProgresstime *= mods * InfernalMobsCore.instance() + .getMobModHealthFactor(); } - } - ArrayList infernalstacks = null; - if (p > 0) if (p == 1) { - infernalstacks = InfernalHelper.getDropIdListElite(); - mods = InfernalHelper.getMinEliteModifiers(); - } else if (p == 2) { - infernalstacks = InfernalHelper.getDropIdListUltra(); - mods = InfernalHelper.getMinUltraModifiers(); - } else { - infernalstacks = InfernalHelper.getDropIdListInfernal(); - mods = InfernalHelper.getMinInfernoModifiers(); - } - if (infernalstacks != null) { - ItemStack infernalstack = infernalstacks.get(rnd.nextInt(infernalstacks.size())) - .copy(); - // noinspection ConstantConditions - EnchantmentHelper.addRandomEnchantment( - rnd, - infernalstack, - infernalstack.getItem() - .getItemEnchantability()); - stacks.add(infernalstack); - MTE.lEUt *= 8L; - MTE.mMaxProgresstime *= mods * InfernalMobsCore.instance() - .getMobModHealthFactor(); } } diff --git a/src/main/java/kubatech/mixin/Mixin.java b/src/main/java/kubatech/mixin/Mixin.java index ea0e8af7..87e66c2c 100644 --- a/src/main/java/kubatech/mixin/Mixin.java +++ b/src/main/java/kubatech/mixin/Mixin.java @@ -1,5 +1,6 @@ package kubatech.mixin; +import static kubatech.mixin.TargetedMod.INFERNAL_MOBS; import static kubatech.mixin.TargetedMod.VANILLA; import java.util.Arrays; @@ -18,6 +19,9 @@ public enum Mixin { EntityLivingBaseAccessor("minecraft.EntityLivingBaseAccessor", VANILLA), EntitySlimeAccessor("minecraft.EntitySlimeAccessor", VANILLA), + // Infernal Mobs + InfernalMobsCoreAccessor("InfernalMobs.InfernalMobsCoreAccessor", INFERNAL_MOBS), + ; public final String mixinClass; diff --git a/src/main/java/kubatech/mixin/TargetedMod.java b/src/main/java/kubatech/mixin/TargetedMod.java index 6152a912..aa593714 100644 --- a/src/main/java/kubatech/mixin/TargetedMod.java +++ b/src/main/java/kubatech/mixin/TargetedMod.java @@ -6,7 +6,10 @@ public enum TargetedMod { - VANILLA("Minecraft", "unused", true),; + VANILLA("Minecraft", "unused", true), + INFERNAL_MOBS("InfernalMobs", "InfernalMobs-", true), + + ; public final String modName; public final String jarNamePrefixLowercase; diff --git a/src/main/java/kubatech/mixin/mixins/InfernalMobs/InfernalMobsCoreAccessor.java b/src/main/java/kubatech/mixin/mixins/InfernalMobs/InfernalMobsCoreAccessor.java new file mode 100644 index 00000000..e0a87e63 --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/InfernalMobs/InfernalMobsCoreAccessor.java @@ -0,0 +1,57 @@ +package kubatech.mixin.mixins.InfernalMobs; + +import java.util.ArrayList; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; + +import atomicstryker.infernalmobs.common.InfernalMobsCore; +import atomicstryker.infernalmobs.common.mods.api.ModifierLoader; + +@Mixin(value = InfernalMobsCore.class, remap = false) +public interface InfernalMobsCoreAccessor { + + @Invoker + boolean callIsClassAllowed(EntityLivingBase entity); + + @Invoker + boolean callCheckEntityClassForced(EntityLivingBase entity); + + @Accessor + ArrayList> getModifierLoaders(); + + @Accessor + int getEliteRarity(); + + @Accessor + int getUltraRarity(); + + @Accessor + int getInfernoRarity(); + + @Accessor + int getMinEliteModifiers(); + + @Accessor + int getMinUltraModifiers(); + + @Accessor + int getMinInfernoModifiers(); + + @Accessor + ArrayList getDimensionBlackList(); + + @Accessor + ArrayList getDropIdListElite(); + + @Accessor + ArrayList getDropIdListUltra(); + + @Accessor + ArrayList getDropIdListInfernal(); + +} diff --git a/src/main/java/kubatech/nei/Mob_Handler.java b/src/main/java/kubatech/nei/Mob_Handler.java index f6e859ec..edccb30c 100644 --- a/src/main/java/kubatech/nei/Mob_Handler.java +++ b/src/main/java/kubatech/nei/Mob_Handler.java @@ -70,6 +70,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.util.glu.GLU; +import atomicstryker.infernalmobs.common.InfernalMobsCore; import codechicken.lib.gui.GuiDraw; import codechicken.nei.NEIClientUtils; import codechicken.nei.PositionedStack; @@ -85,7 +86,6 @@ import gregtech.api.util.GT_Utility; import kubatech.Tags; import kubatech.api.LoaderReference; -import kubatech.api.helpers.InfernalHelper; import kubatech.api.mobhandler.MobDrop; import kubatech.api.utils.FastRandom; import kubatech.api.utils.MobUtils; @@ -93,6 +93,7 @@ import kubatech.config.Config; import kubatech.kubatech; import kubatech.loaders.MobRecipeLoader; +import kubatech.mixin.mixins.InfernalMobs.InfernalMobsCoreAccessor; import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber; public class Mob_Handler extends TemplateRecipeHandler { @@ -603,8 +604,9 @@ public MobCachedRecipe(EntityLiving mob, List mOutputs, int if (!LoaderReference.InfernalMobs) infernaltype = -1; // not supported else { - if (!InfernalHelper.isClassAllowed(mob)) infernaltype = 0; // not allowed - else if (InfernalHelper.checkEntityClassForced(mob)) infernaltype = 2; // forced + InfernalMobsCoreAccessor infernalMobsCore = (InfernalMobsCoreAccessor) InfernalMobsCore.instance(); + if (!infernalMobsCore.callIsClassAllowed(mob)) infernaltype = 0; // not allowed + else if (infernalMobsCore.callCheckEntityClassForced(mob)) infernaltype = 2; // forced else infernaltype = 1; // normal } } From 9e3a4aeeb03bd85b96c62517aeeed3c74560f670 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 3 Jun 2023 15:17:00 +0200 Subject: [PATCH 14/26] Update build.gradle --- build.gradle | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 8ddfa124..f56a438f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -//version: 1682616243 +//version: 1685785062 /* DO NOT CHANGE THIS FILE! Also, you may replace this file at any time if there is an update available. @@ -69,8 +69,11 @@ plugins { id 'com.diffplug.spotless' version '6.13.0' apply false // 6.13.0 is the last jvm8 supporting version id 'com.modrinth.minotaur' version '2.+' apply false id 'com.matthewprenger.cursegradle' version '1.4.0' apply false - id 'com.gtnewhorizons.retrofuturagradle' version '1.3.7' + id 'com.gtnewhorizons.retrofuturagradle' version '1.3.14' } + +print("You might want to check out './gradlew :faq' if your build fails.\n") + boolean settingsupdated = verifySettingsGradle() settingsupdated = verifyGitAttributes() || settingsupdated if (settingsupdated) @@ -219,6 +222,8 @@ if (enableModernJavaSyntax.toBoolean()) { dependencies { annotationProcessor 'com.github.bsideup.jabel:jabel-javac-plugin:1.0.0' + // workaround for https://github.com/bsideup/jabel/issues/174 + annotationProcessor 'net.java.dev.jna:jna-platform:5.13.0' compileOnly('com.github.bsideup.jabel:jabel-javac-plugin:1.0.0') { transitive = false // We only care about the 1 annotation class } @@ -564,9 +569,10 @@ repositories { def mixinProviderGroup = "io.github.legacymoddingmc" def mixinProviderModule = "unimixins" -def mixinProviderVersion = "0.1.6" +def mixinProviderVersion = "0.1.7.1" def mixinProviderSpecNoClassifer = "${mixinProviderGroup}:${mixinProviderModule}:${mixinProviderVersion}" def mixinProviderSpec = "${mixinProviderSpecNoClassifer}:dev" +ext.mixinProviderSpec = mixinProviderSpec dependencies { if (usesMixins.toBoolean()) { @@ -724,7 +730,7 @@ dependencies { java17Dependencies("com.github.GTNewHorizons:lwjgl3ify:${lwjgl3ifyVersion}") } if (modId != 'hodgepodge') { - java17Dependencies('com.github.GTNewHorizons:Hodgepodge:2.2.8') + java17Dependencies('com.github.GTNewHorizons:Hodgepodge:2.2.13') } java17PatchDependencies('net.minecraft:launchwrapper:1.15') {transitive = false} @@ -817,6 +823,18 @@ public abstract class RunHotswappableMinecraftTask extends RunMinecraftTask { } this.classpath(project.java17DependenciesCfg) } + + public void setup(Project project) { + super.setup(project) + if (project.usesMixins.toBoolean()) { + this.extraJvmArgs.addAll(project.provider(() -> { + def mixinCfg = project.configurations.detachedConfiguration(project.dependencies.create(project.mixinProviderSpec)) + mixinCfg.canBeConsumed = false + mixinCfg.transitive = false + enableHotswap ? ["-javaagent:" + mixinCfg.singleFile.absolutePath] : [] + })) + } + } } def runClient17Task = tasks.register("runClient17", RunHotswappableMinecraftTask, Distribution.CLIENT, "runClient") @@ -1253,6 +1271,23 @@ if (!project.getGradle().startParameter.isOffline() && !Boolean.getBoolean('DISA } } +// If you want to add more cases to this task, implement them as arguments if total amount to print gets too large +tasks.register('faq') { + group = 'GTNH Buildscript' + description = 'Prints frequently asked questions about building a project' + + doLast { + print("If your build fails to fetch dependencies, run './gradlew updateDependencies'. " + + "Or you can manually check if the versions are still on the distributing sites - " + + "the links can be found in repositories.gradle and build.gradle:repositories, " + + "but not build.gradle:buildscript.repositories - those ones are for gradle plugin metadata.\n\n" + + "If your build fails to recognize the syntax of new Java versions, enable Jabel in your " + + "gradle.properties. See how it's done in GTNH ExampleMod/gradle.properties. " + + "However, keep in mind that Jabel enables only syntax features, but not APIs that were introduced in " + + "Java 9 or later.") + } +} + static URL availableBuildScriptUrl() { new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/build.gradle") } From b46e1605e56565a26a85545d9af91fc34eed2f65 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 3 Jun 2023 22:54:16 +0200 Subject: [PATCH 15/26] One more --- src/main/java/kubatech/api/utils/MobUtils.java | 16 ++++------------ src/main/java/kubatech/mixin/Mixin.java | 1 + .../minecraft/RendererLivingEntityAccessor.java | 15 +++++++++++++++ src/main/java/kubatech/nei/Mob_Handler.java | 14 -------------- 4 files changed, 20 insertions(+), 26 deletions(-) create mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/RendererLivingEntityAccessor.java diff --git a/src/main/java/kubatech/api/utils/MobUtils.java b/src/main/java/kubatech/api/utils/MobUtils.java index ad48c51c..d3ec5975 100644 --- a/src/main/java/kubatech/api/utils/MobUtils.java +++ b/src/main/java/kubatech/api/utils/MobUtils.java @@ -20,8 +20,6 @@ package kubatech.api.utils; -import java.lang.reflect.Field; - import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBox; import net.minecraft.client.model.ModelRenderer; @@ -32,11 +30,10 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import kubatech.mixin.mixins.minecraft.RendererLivingEntityAccessor; public class MobUtils { - private static Field mainmodelfield = null; - @SideOnly(Side.CLIENT) public static float getDesiredScale(EntityLiving e, float desiredHeight) { return getDesiredScale(getMobHeight(e), desiredHeight); @@ -50,17 +47,12 @@ public static float getDesiredScale(float entityHeight, float desiredHeight) { @SideOnly(Side.CLIENT) public static float getMobHeight(EntityLiving e) { try { - if (mainmodelfield == null) { - mainmodelfield = RendererLivingEntity.class - .getDeclaredField(ModUtils.isDeobfuscatedEnvironment ? "mainModel" : "field_77045_g"); - mainmodelfield.setAccessible(true); - } float eheight = e.height; float ewidth = e.width; Render r = RenderManager.instance.getEntityRenderObject(e); - if (r instanceof RendererLivingEntity && mainmodelfield != null) { - ModelBase mainmodel = (ModelBase) mainmodelfield.get(r); - for (Object box : mainmodel.boxList) { + if (r instanceof RendererLivingEntity) { + ModelBase mainModel = ((RendererLivingEntityAccessor) r).getMainModel(); + for (Object box : mainModel.boxList) { if (box instanceof ModelRenderer) { float minY = 999f; float minX = 999f; diff --git a/src/main/java/kubatech/mixin/Mixin.java b/src/main/java/kubatech/mixin/Mixin.java index 87e66c2c..65bc2847 100644 --- a/src/main/java/kubatech/mixin/Mixin.java +++ b/src/main/java/kubatech/mixin/Mixin.java @@ -18,6 +18,7 @@ public enum Mixin { EntityLivingAccessor("minecraft.EntityLivingAccessor", VANILLA), EntityLivingBaseAccessor("minecraft.EntityLivingBaseAccessor", VANILLA), EntitySlimeAccessor("minecraft.EntitySlimeAccessor", VANILLA), + RendererLivingEntityAccessor("minecraft.RendererLivingEntityAccessor", VANILLA), // Infernal Mobs InfernalMobsCoreAccessor("InfernalMobs.InfernalMobsCoreAccessor", INFERNAL_MOBS), diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/RendererLivingEntityAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/RendererLivingEntityAccessor.java new file mode 100644 index 00000000..a2fe9395 --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/minecraft/RendererLivingEntityAccessor.java @@ -0,0 +1,15 @@ +package kubatech.mixin.mixins.minecraft; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RendererLivingEntity; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = RendererLivingEntity.class) +public interface RendererLivingEntityAccessor { + + @Accessor + ModelBase getMainModel(); + +} diff --git a/src/main/java/kubatech/nei/Mob_Handler.java b/src/main/java/kubatech/nei/Mob_Handler.java index edccb30c..c88708ab 100644 --- a/src/main/java/kubatech/nei/Mob_Handler.java +++ b/src/main/java/kubatech/nei/Mob_Handler.java @@ -38,7 +38,6 @@ import static kubatech.nei.Mob_Handler.Translations.RARE_DROPS; import java.awt.*; -import java.lang.reflect.Field; import java.nio.FloatBuffer; import java.util.ArrayList; import java.util.List; @@ -49,7 +48,6 @@ import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.entity.RendererLivingEntity; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLiving; @@ -233,18 +231,6 @@ public String getGuiTexture() { return "kubatech:textures/gui/MobHandler.png"; } - private static final Field mainmodelfield; - - static { - try { - mainmodelfield = RendererLivingEntity.class - .getDeclaredField(ModUtils.isDeobfuscatedEnvironment ? "mainModel" : "field_77045_g"); - mainmodelfield.setAccessible(true); - } catch (NoSuchFieldException e) { - throw new RuntimeException(e); - } - } - @Override public void drawBackground(int recipe) { GL11.glColor4f(1f, 1f, 1f, 1f); From 813e60cacaa1cfc97c3fa9f5626e15deae09f4c9 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 3 Jun 2023 23:03:15 +0200 Subject: [PATCH 16/26] Return class nodes to optimize --- .../api/helpers/ReflectionHelper.java | 33 ++++++++++++++----- src/main/java/kubatech/kubatech.java | 5 +-- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/java/kubatech/api/helpers/ReflectionHelper.java b/src/main/java/kubatech/api/helpers/ReflectionHelper.java index 90e61ec0..8f2234f0 100644 --- a/src/main/java/kubatech/api/helpers/ReflectionHelper.java +++ b/src/main/java/kubatech/api/helpers/ReflectionHelper.java @@ -22,6 +22,7 @@ import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.URL; @@ -32,6 +33,11 @@ import java.util.jar.JarFile; import java.util.stream.Collectors; +import net.minecraft.launchwrapper.Launch; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.tree.ClassNode; + public class ReflectionHelper { private static class _FieldsMethods { @@ -151,12 +157,11 @@ public static T callMethod(Object obj, String methodName, T defaultValue, Ob /** * Gets all classes in a specific package path, works only for jar files. - * Doesn't initialize classes * * @param packageName The package name - * @return The classes + * @return The class nodes */ - public static Collection> getClasses(String packageName) throws IOException, SecurityException { + public static Collection getClasses(String packageName) throws IOException, SecurityException { ClassLoader classLoader = Thread.currentThread() .getContextClassLoader(); assert classLoader != null; @@ -166,6 +171,7 @@ public static Collection> getClasses(String packageName) throws IOExcep if (!resource.getProtocol() .equals("jar")) return Collections.emptySet(); String jarPath = resource.getPath(); + try (JarFile jar = new JarFile(jarPath.substring(5, jarPath.indexOf('!')))) { return jar.stream() .filter( @@ -176,12 +182,21 @@ public static Collection> getClasses(String packageName) throws IOExcep .map(j -> { try { String name = j.getName(); - return Class.forName( - name.replace('/', '.') - .substring(0, name.lastIndexOf(".class")), - false, - classLoader); - } catch (ClassNotFoundException ignored) {} + URL jarResource = Launch.classLoader.getResource(name); + if (jarResource == null) return null; + byte[] bytes; + try (InputStream is = jarResource.openStream()) { + bytes = new byte[(int) j.getSize()]; + if (is.read(bytes) != bytes.length) return null; + if (is.available() > 0) return null; + } + + ClassNode cn = new ClassNode(); + ClassReader cr = new ClassReader(bytes); + cr.accept(cn, 0); + + return cn; + } catch (IOException ignored) {} return null; }) .filter(Objects::nonNull) diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java index 4eebab8b..994ba28e 100644 --- a/src/main/java/kubatech/kubatech.java +++ b/src/main/java/kubatech/kubatech.java @@ -32,6 +32,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.objectweb.asm.tree.ClassNode; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; @@ -70,7 +71,7 @@ + "after: Forestry; " + "after: DraconicEvolution; " + "after: Avaritia; " - + " after: dreamcraft; ") + + "after: dreamcraft; ") public class kubatech { public static kubatech instance = null; @@ -115,7 +116,7 @@ public void displayAllReleventItems(List p_78018_1_) { @SidedProxy(clientSide = Tags.MODID + ".ClientProxy", serverSide = Tags.MODID + ".CommonProxy") public static CommonProxy proxy; - private static Collection> myClasses; + private static Collection myClasses; @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { From 507dd95f103fad68f19b970efb60703257a0fe80 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Wed, 14 Jun 2023 16:43:29 +0200 Subject: [PATCH 17/26] Translations mixin --- src/main/java/kubatech/mixin/Mixin.java | 2 + .../kubatech/mixin/MixinsVariablesHelper.java | 6 +++ .../minecraft/LanguageRegistryMixin.java | 26 +++++++++++++ .../minecraft/StringTranslateMixin.java | 39 +++++++++++++++++++ src/main/java/kubatech/nei/Mob_Handler.java | 4 +- 5 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 src/main/java/kubatech/mixin/MixinsVariablesHelper.java create mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java create mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java diff --git a/src/main/java/kubatech/mixin/Mixin.java b/src/main/java/kubatech/mixin/Mixin.java index 65bc2847..d3991e0e 100644 --- a/src/main/java/kubatech/mixin/Mixin.java +++ b/src/main/java/kubatech/mixin/Mixin.java @@ -19,6 +19,8 @@ public enum Mixin { EntityLivingBaseAccessor("minecraft.EntityLivingBaseAccessor", VANILLA), EntitySlimeAccessor("minecraft.EntitySlimeAccessor", VANILLA), RendererLivingEntityAccessor("minecraft.RendererLivingEntityAccessor", VANILLA), + StringTranslateMixin("minecraft.StringTranslateMixin", VANILLA), + LanguageRegistryMixin("minecraft.LanguageRegistryMixin", VANILLA), // Infernal Mobs InfernalMobsCoreAccessor("InfernalMobs.InfernalMobsCoreAccessor", INFERNAL_MOBS), diff --git a/src/main/java/kubatech/mixin/MixinsVariablesHelper.java b/src/main/java/kubatech/mixin/MixinsVariablesHelper.java new file mode 100644 index 00000000..1875be6e --- /dev/null +++ b/src/main/java/kubatech/mixin/MixinsVariablesHelper.java @@ -0,0 +1,6 @@ +package kubatech.mixin; + +public class MixinsVariablesHelper { + + public static String currentlyTranslating = null; +} diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java new file mode 100644 index 00000000..a6d14e07 --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java @@ -0,0 +1,26 @@ +package kubatech.mixin.mixins.minecraft; + +import static kubatech.mixin.MixinsVariablesHelper.currentlyTranslating; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.registry.LanguageRegistry; +import cpw.mods.fml.relauncher.Side; + +@Mixin(value = LanguageRegistry.class) +public class LanguageRegistryMixin { + + @Inject(method = "loadLanguagesFor", at = @At(value = "HEAD"), remap = false) + private void loadLanguagesForHEAD(ModContainer container, Side side, CallbackInfo callbackInfo) { + currentlyTranslating = container.getModId(); + } + + @Inject(method = "loadLanguagesFor", at = @At(value = "RETURN"), remap = false) + private void loadLanguagesForRETURN(ModContainer container, Side side, CallbackInfo callbackInfo) { + currentlyTranslating = null; + } +} diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java new file mode 100644 index 00000000..a6b74fc1 --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java @@ -0,0 +1,39 @@ +package kubatech.mixin.mixins.minecraft; + +import static kubatech.mixin.MixinsVariablesHelper.currentlyTranslating; + +import java.lang.reflect.Field; +import java.util.regex.Matcher; + +import net.minecraft.util.StringTranslate; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import kubatech.Tags; + +@Mixin(value = StringTranslate.class) +public class StringTranslateMixin { + + private static Field matcherTextField = null; + + @Redirect( + method = "parseLangFile", + at = @At(value = "INVOKE", target = "Ljava/util/regex/Matcher;replaceAll(S)S", remap = false), + remap = false) + private static String replaceAll(Matcher matcher, String replace) { + if (currentlyTranslating != null && currentlyTranslating.equals(Tags.MODID)) { + try { + if (matcherTextField == null) { + matcherTextField = Matcher.class.getDeclaredField("text"); + matcherTextField.setAccessible(true); + } + return (String) matcherTextField.get(matcher); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + return matcher.replaceAll(replace); + } +} diff --git a/src/main/java/kubatech/nei/Mob_Handler.java b/src/main/java/kubatech/nei/Mob_Handler.java index c88708ab..5d4a8da8 100644 --- a/src/main/java/kubatech/nei/Mob_Handler.java +++ b/src/main/java/kubatech/nei/Mob_Handler.java @@ -517,8 +517,8 @@ public MobPositionedStack(Object object, int x, int y, MobDrop.DropType type, in if (isPlayerOnly) { extraTooltip.add(EnumChatFormatting.RESET + PLAYER_ONLY.get()); extraTooltip.add( - EnumChatFormatting.RESET - + EEC_CHANCE.get(((double) chance / 100d) * Config.MobHandler.playerOnlyDropsModifier)); + EnumChatFormatting.RESET + EEC_CHANCE + .get(((double) ((int) ((double) chance * Config.MobHandler.playerOnlyDropsModifier)) / 100d))); } extraTooltip.add(EnumChatFormatting.RESET + AVERAGE_REMINDER.get()); From 8dbcc3acb3f65b97d5d72886db180b2c85cd5a00 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Wed, 14 Jun 2023 16:44:36 +0200 Subject: [PATCH 18/26] Automatically add commands --- src/main/java/kubatech/CommonProxy.java | 5 ---- .../java/kubatech/commands/CommandBees.java | 1 + .../java/kubatech/commands/CommandConfig.java | 1 + .../kubatech/commands/CommandCustomDrops.java | 1 + .../kubatech/commands/CommandHandler.java | 30 ++++++++++++++++++- .../java/kubatech/commands/CommandHelp.java | 1 + .../java/kubatech/commands/CommandTea.java | 1 + 7 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/java/kubatech/CommonProxy.java b/src/main/java/kubatech/CommonProxy.java index cc4ff896..6799ed85 100644 --- a/src/main/java/kubatech/CommonProxy.java +++ b/src/main/java/kubatech/CommonProxy.java @@ -77,11 +77,6 @@ public void serverAboutToStart(FMLServerAboutToStartEvent event) {} public void serverStarting(FMLServerStartingEvent event) { RecipeLoader.addRecipesLate(); CommandHandler cmd = new CommandHandler(); - cmd.addCommand(new CommandHelp()); - cmd.addCommand(new CommandConfig()); - cmd.addCommand(new CommandBees()); - cmd.addCommand(new CommandTea()); - cmd.addCommand(new CommandCustomDrops()); event.registerServerCommand(cmd); } diff --git a/src/main/java/kubatech/commands/CommandBees.java b/src/main/java/kubatech/commands/CommandBees.java index 8d010805..69862b41 100644 --- a/src/main/java/kubatech/commands/CommandBees.java +++ b/src/main/java/kubatech/commands/CommandBees.java @@ -41,6 +41,7 @@ import forestry.api.apiculture.IBee; import forestry.api.apiculture.IBeeGenome; +@CommandHandler.ChildCommand public class CommandBees extends CommandBase { @Override diff --git a/src/main/java/kubatech/commands/CommandConfig.java b/src/main/java/kubatech/commands/CommandConfig.java index e4ffe975..cf43bc88 100644 --- a/src/main/java/kubatech/commands/CommandConfig.java +++ b/src/main/java/kubatech/commands/CommandConfig.java @@ -36,6 +36,7 @@ import kubatech.kubatech; import kubatech.loaders.MobRecipeLoader; +@CommandHandler.ChildCommand public class CommandConfig extends CommandBase { enum Translations { diff --git a/src/main/java/kubatech/commands/CommandCustomDrops.java b/src/main/java/kubatech/commands/CommandCustomDrops.java index c9b15fea..06764991 100644 --- a/src/main/java/kubatech/commands/CommandCustomDrops.java +++ b/src/main/java/kubatech/commands/CommandCustomDrops.java @@ -30,6 +30,7 @@ import kubatech.loaders.MobRecipeLoader; +@CommandHandler.ChildCommand public class CommandCustomDrops extends CommandBase { @Override diff --git a/src/main/java/kubatech/commands/CommandHandler.java b/src/main/java/kubatech/commands/CommandHandler.java index 0daea862..89f1db74 100644 --- a/src/main/java/kubatech/commands/CommandHandler.java +++ b/src/main/java/kubatech/commands/CommandHandler.java @@ -25,6 +25,10 @@ import static kubatech.commands.CommandHandler.Translations.INVALID; import static kubatech.commands.CommandHandler.Translations.USAGE; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -38,6 +42,8 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; +import kubatech.kubatech; + public class CommandHandler extends CommandBase { enum Translations { @@ -121,7 +127,29 @@ public boolean canCommandSenderUseCommand(ICommandSender p_71519_1_) { return true; } - public void addCommand(ICommand command) { + public static void addCommand(ICommand command) { commands.put(command.getCommandName(), command); } + + static { + String ChildCommandDesc = "L" + ChildCommand.class.getName() + .replace(".", "/") + ";"; + kubatech.myClasses.stream() + .filter( + clazz -> clazz.invisibleAnnotations != null && clazz.invisibleAnnotations.stream() + .anyMatch(ann -> ann.desc.equals(ChildCommandDesc))) + .forEach(clazz -> { + try { + addCommand( + (ICommand) Class.forName(clazz.name.replace("/", ".")) + .newInstance()); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { + throw new RuntimeException(e); + } + }); + } + + @Target(ElementType.TYPE) + @Retention(RetentionPolicy.CLASS) + public @interface ChildCommand {} } diff --git a/src/main/java/kubatech/commands/CommandHelp.java b/src/main/java/kubatech/commands/CommandHelp.java index 47a448af..d7e9fbee 100644 --- a/src/main/java/kubatech/commands/CommandHelp.java +++ b/src/main/java/kubatech/commands/CommandHelp.java @@ -28,6 +28,7 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.StatCollector; +@CommandHandler.ChildCommand public class CommandHelp extends CommandBase { enum Translations { diff --git a/src/main/java/kubatech/commands/CommandTea.java b/src/main/java/kubatech/commands/CommandTea.java index 70a924d9..64412f8e 100644 --- a/src/main/java/kubatech/commands/CommandTea.java +++ b/src/main/java/kubatech/commands/CommandTea.java @@ -38,6 +38,7 @@ import kubatech.api.helpers.UUIDFinder; import kubatech.api.tea.TeaNetwork; +@CommandHandler.ChildCommand public class CommandTea extends CommandBase { enum Translations { From 08aa496ce7ac2d1d37365c6e830fda1600d58841 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Wed, 14 Jun 2023 21:57:34 +0200 Subject: [PATCH 19/26] Fixes --- src/main/java/kubatech/mixin/Mixin.java | 1 + .../minecraft/LanguageRegistryMixin.java | 5 ++- .../mixin/mixins/minecraft/LocaleMixin.java | 45 +++++++++++++++++++ .../minecraft/StringTranslateMixin.java | 26 +++++------ .../mixin/mixins/minecraft/WorldMixin.java | 12 ++--- 5 files changed, 65 insertions(+), 24 deletions(-) create mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java diff --git a/src/main/java/kubatech/mixin/Mixin.java b/src/main/java/kubatech/mixin/Mixin.java index d3991e0e..a9f61e9b 100644 --- a/src/main/java/kubatech/mixin/Mixin.java +++ b/src/main/java/kubatech/mixin/Mixin.java @@ -21,6 +21,7 @@ public enum Mixin { RendererLivingEntityAccessor("minecraft.RendererLivingEntityAccessor", VANILLA), StringTranslateMixin("minecraft.StringTranslateMixin", VANILLA), LanguageRegistryMixin("minecraft.LanguageRegistryMixin", VANILLA), + LocaleMixin("minecraft.LocaleMixin", Side.CLIENT, VANILLA), // Infernal Mobs InfernalMobsCoreAccessor("InfernalMobs.InfernalMobsCoreAccessor", INFERNAL_MOBS), diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java index a6d14e07..77d99d2a 100644 --- a/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java +++ b/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java @@ -11,15 +11,16 @@ import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.relauncher.Side; +@SuppressWarnings("unused") @Mixin(value = LanguageRegistry.class) public class LanguageRegistryMixin { - @Inject(method = "loadLanguagesFor", at = @At(value = "HEAD"), remap = false) + @Inject(method = "loadLanguagesFor", at = @At(value = "HEAD"), remap = false, require = 1) private void loadLanguagesForHEAD(ModContainer container, Side side, CallbackInfo callbackInfo) { currentlyTranslating = container.getModId(); } - @Inject(method = "loadLanguagesFor", at = @At(value = "RETURN"), remap = false) + @Inject(method = "loadLanguagesFor", at = @At(value = "RETURN"), remap = false, require = 1) private void loadLanguagesForRETURN(ModContainer container, Side side, CallbackInfo callbackInfo) { currentlyTranslating = null; } diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java new file mode 100644 index 00000000..b8b2386a --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java @@ -0,0 +1,45 @@ +package kubatech.mixin.mixins.minecraft; + +import static kubatech.mixin.MixinsVariablesHelper.currentlyTranslating; + +import java.util.regex.Matcher; + +import net.minecraft.client.resources.Locale; + +import net.minecraft.util.ResourceLocation; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.Redirect; + +import kubatech.Tags; + +@SuppressWarnings("unused") +@Mixin(value = Locale.class) +public class LocaleMixin { + + @ModifyArg( + method = "Lnet/minecraft/client/resources/Locale;loadLocaleDataFiles(Lnet/minecraft/client/resources/IResourceManager;Ljava/util/List;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/IResourceManager;getAllResources(Lnet/minecraft/util/ResourceLocation;)Ljava/util/List;"), + index = 0, + require = 1) + private ResourceLocation loadLocaleDataFiles(ResourceLocation resourceLocation) { + currentlyTranslating = resourceLocation.getResourceDomain(); + return resourceLocation; + } + + @Redirect( + method = "Lnet/minecraft/client/resources/Locale;loadLocaleData(Ljava/io/InputStream;)V", + at = @At( + value = "INVOKE", + target = "Ljava/util/regex/Matcher;replaceAll(Ljava/lang/String;)Ljava/lang/String;", + remap = false), + require = 1) + private String replaceAll(Matcher matcher, String replace) { + if (currentlyTranslating != null && currentlyTranslating.equals(Tags.MODID) && matcher.find()) { + return matcher.replaceFirst(matcher.group()); + } + return matcher.replaceAll(replace); + } + +} diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java index a6b74fc1..6c276108 100644 --- a/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java +++ b/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java @@ -2,7 +2,6 @@ import static kubatech.mixin.MixinsVariablesHelper.currentlyTranslating; -import java.lang.reflect.Field; import java.util.regex.Matcher; import net.minecraft.util.StringTranslate; @@ -13,26 +12,21 @@ import kubatech.Tags; +@SuppressWarnings("unused") @Mixin(value = StringTranslate.class) public class StringTranslateMixin { - private static Field matcherTextField = null; - @Redirect( - method = "parseLangFile", - at = @At(value = "INVOKE", target = "Ljava/util/regex/Matcher;replaceAll(S)S", remap = false), - remap = false) + method = "Lnet/minecraft/util/StringTranslate;parseLangFile(Ljava/io/InputStream;)Ljava/util/HashMap;", + at = @At( + value = "INVOKE", + target = "Ljava/util/regex/Matcher;replaceAll(Ljava/lang/String;)Ljava/lang/String;", + remap = false), + remap = false, + require = 1) private static String replaceAll(Matcher matcher, String replace) { - if (currentlyTranslating != null && currentlyTranslating.equals(Tags.MODID)) { - try { - if (matcherTextField == null) { - matcherTextField = Matcher.class.getDeclaredField("text"); - matcherTextField.setAccessible(true); - } - return (String) matcherTextField.get(matcher); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } + if (currentlyTranslating != null && currentlyTranslating.equals(Tags.MODID) && matcher.find()) { + return matcher.replaceFirst(matcher.group()); } return matcher.replaceAll(replace); } diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java index 4d8aaf10..ed28dc60 100644 --- a/src/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java +++ b/src/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java @@ -5,8 +5,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import com.gtnewhorizon.mixinextras.injector.ModifyReturnValue; import kubatech.loaders.BlockLoader; @@ -15,9 +15,9 @@ public class WorldMixin { @SuppressWarnings("ConstantConditions") - @Inject(method = "getBlock", at = @At("RETURN"), require = 1) - private void getBlockDetector(int x, int y, int z, CallbackInfoReturnable callbackInfoReturnable) { - if (callbackInfoReturnable.getReturnValue() == BlockLoader.kubaBlock) - BlockLoader.kubaBlock.setLastBlockAccess((World) (Object) this, x, y, z); + @ModifyReturnValue(method = "getBlock", at = @At("RETURN"), require = 1) + private Block getBlockDetector(Block block, int x, int y, int z) { + if (block == BlockLoader.kubaBlock) BlockLoader.kubaBlock.setLastBlockAccess((World) (Object) this, x, y, z); + return block; } } From 51c87275adb353b8a001c94587dfd6cd97dd8457 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Thu, 15 Jun 2023 11:58:59 +0200 Subject: [PATCH 20/26] Fix https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/12021 --- .../java/kubatech/api/utils/ItemUtils.java | 35 +++++++++++++++++++ src/main/java/kubatech/mixin/Mixin.java | 1 + .../mixins/minecraft/ItemStackAccessor.java | 18 ++++++++++ .../mixin/mixins/minecraft/LocaleMixin.java | 6 ++-- ...ileEntity_ExtremeIndustrialGreenhouse.java | 34 ++++++++---------- ...T_MetaTileEntity_MegaIndustrialApiary.java | 10 +++--- 6 files changed, 79 insertions(+), 25 deletions(-) create mode 100644 src/main/java/kubatech/api/utils/ItemUtils.java create mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/ItemStackAccessor.java diff --git a/src/main/java/kubatech/api/utils/ItemUtils.java b/src/main/java/kubatech/api/utils/ItemUtils.java new file mode 100644 index 00000000..c30a67e0 --- /dev/null +++ b/src/main/java/kubatech/api/utils/ItemUtils.java @@ -0,0 +1,35 @@ +package kubatech.api.utils; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import kubatech.mixin.mixins.minecraft.ItemStackAccessor; + +public class ItemUtils { + + public static NBTTagCompound writeItemStackToNBT(ItemStack stack) { + NBTTagCompound compound = new NBTTagCompound(); + + compound.setInteger("id", Item.getIdFromItem(((ItemStackAccessor) (Object) stack).getItem())); + compound.setInteger("Count", stack.stackSize); + compound.setInteger("Damage", ((ItemStackAccessor) (Object) stack).getItemDamage()); + + if (stack.stackTagCompound != null) compound.setTag("tag", stack.stackTagCompound); + + return compound; + } + + public static ItemStack readItemStackFromNBT(NBTTagCompound compound) { + if (compound.hasKey("id", 2)) return ItemStack.loadItemStackFromNBT(compound); + + ItemStack stack = new ItemStack( + Item.getItemById(compound.getInteger("id")), + compound.getInteger("Count"), + compound.getInteger("Damage")); + + if (compound.hasKey("tag", 10)) stack.stackTagCompound = compound.getCompoundTag("tag"); + + return stack; + } +} diff --git a/src/main/java/kubatech/mixin/Mixin.java b/src/main/java/kubatech/mixin/Mixin.java index a9f61e9b..a33edc7e 100644 --- a/src/main/java/kubatech/mixin/Mixin.java +++ b/src/main/java/kubatech/mixin/Mixin.java @@ -22,6 +22,7 @@ public enum Mixin { StringTranslateMixin("minecraft.StringTranslateMixin", VANILLA), LanguageRegistryMixin("minecraft.LanguageRegistryMixin", VANILLA), LocaleMixin("minecraft.LocaleMixin", Side.CLIENT, VANILLA), + ItemStackAccessor("minecraft.ItemStackAccessor", VANILLA), // Infernal Mobs InfernalMobsCoreAccessor("InfernalMobs.InfernalMobsCoreAccessor", INFERNAL_MOBS), diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/ItemStackAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/ItemStackAccessor.java new file mode 100644 index 00000000..8a758d1f --- /dev/null +++ b/src/main/java/kubatech/mixin/mixins/minecraft/ItemStackAccessor.java @@ -0,0 +1,18 @@ +package kubatech.mixin.mixins.minecraft; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = ItemStack.class) +public interface ItemStackAccessor { + + @Accessor(value = "field_151002_e", remap = false) + Item getItem(); + + @Accessor + int getItemDamage(); + +} diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java index b8b2386a..45a7c2e1 100644 --- a/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java +++ b/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java @@ -5,8 +5,8 @@ import java.util.regex.Matcher; import net.minecraft.client.resources.Locale; - import net.minecraft.util.ResourceLocation; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; @@ -20,7 +20,9 @@ public class LocaleMixin { @ModifyArg( method = "Lnet/minecraft/client/resources/Locale;loadLocaleDataFiles(Lnet/minecraft/client/resources/IResourceManager;Ljava/util/List;)V", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/IResourceManager;getAllResources(Lnet/minecraft/util/ResourceLocation;)Ljava/util/List;"), + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/resources/IResourceManager;getAllResources(Lnet/minecraft/util/ResourceLocation;)Ljava/util/List;"), index = 0, require = 1) private ResourceLocation loadLocaleDataFiles(ResourceLocation resourceLocation) { diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java index 4b86cda1..0c8dab27 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java @@ -31,6 +31,8 @@ import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; import static kubatech.api.Variables.Author; import static kubatech.api.Variables.StructureHologram; +import static kubatech.api.utils.ItemUtils.readItemStackFromNBT; +import static kubatech.api.utils.ItemUtils.writeItemStackToNBT; import java.io.IOException; import java.lang.ref.WeakReference; @@ -1097,27 +1099,22 @@ private static class GreenHouseSlot extends InventoryCrafting { public NBTTagCompound toNBTTagCompound() { NBTTagCompound aNBT = new NBTTagCompound(); - aNBT.setTag("input", input.writeToNBT(new NBTTagCompound())); + aNBT.setTag("input", writeItemStackToNBT(input)); aNBT.setBoolean("isValid", isValid); aNBT.setBoolean("isIC2Crop", isIC2Crop); if (!isIC2Crop) { aNBT.setInteger("crop", Block.getIdFromBlock(crop)); if (customDrops != null && customDrops.size() > 0) { aNBT.setInteger("customDropsCount", customDrops.size()); - for (int i = 0; i < customDrops.size(); i++) aNBT.setTag( - "customDrop." + i, - customDrops.get(i) - .writeToNBT(new NBTTagCompound())); + for (int i = 0; i < customDrops.size(); i++) + aNBT.setTag("customDrop." + i, writeItemStackToNBT(customDrops.get(i))); } aNBT.setInteger("dropscount", drops.size()); - for (int i = 0; i < drops.size(); i++) aNBT.setTag( - "drop." + i, - drops.get(i) - .writeToNBT(new NBTTagCompound())); + for (int i = 0; i < drops.size(); i++) aNBT.setTag("drop." + i, writeItemStackToNBT(drops.get(i))); aNBT.setInteger("optimalgrowth", optimalgrowth); aNBT.setBoolean("needsreplanting", needsreplanting); } else { - if (undercrop != null) aNBT.setTag("undercrop", undercrop.writeToNBT(new NBTTagCompound())); + if (undercrop != null) aNBT.setTag("undercrop", writeItemStackToNBT(undercrop)); aNBT.setInteger("generationscount", generations.size()); for (int i = 0; i < generations.size(); i++) { aNBT.setInteger( @@ -1128,9 +1125,9 @@ public NBTTagCompound toNBTTagCompound() { .size(); j++) aNBT.setTag( "generation." + i + "." + j, - generations.get(i) - .get(j) - .writeToNBT(new NBTTagCompound())); + writeItemStackToNBT( + generations.get(i) + .get(j))); } aNBT.setInteger("growthticks", growthticks); aNBT.setBoolean("noHumidity", noHumidity); @@ -1142,29 +1139,28 @@ public GreenHouseSlot(NBTTagCompound aNBT) { super(null, 3, 3); isIC2Crop = aNBT.getBoolean("isIC2Crop"); isValid = aNBT.getBoolean("isValid"); - input = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("input")); + input = readItemStackFromNBT(aNBT.getCompoundTag("input")); if (!isIC2Crop) { crop = Block.getBlockById(aNBT.getInteger("crop")); if (aNBT.hasKey("customDropsCount")) { int imax = aNBT.getInteger("customDropsCount"); customDrops = new ArrayList<>(imax); for (int i = 0; i < imax; i++) - customDrops.add(ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("customDrop." + i))); + customDrops.add(readItemStackFromNBT(aNBT.getCompoundTag("customDrop." + i))); } drops = new ArrayList<>(); for (int i = 0; i < aNBT.getInteger("dropscount"); i++) - drops.add(ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("drop." + i))); + drops.add(readItemStackFromNBT(aNBT.getCompoundTag("drop." + i))); optimalgrowth = aNBT.getInteger("optimalgrowth"); if (optimalgrowth == 0) optimalgrowth = 7; if (aNBT.hasKey("needsreplanting")) needsreplanting = aNBT.getBoolean("needsreplanting"); } else { - if (aNBT.hasKey("undercrop")) - undercrop = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("undercrop")); + if (aNBT.hasKey("undercrop")) undercrop = readItemStackFromNBT(aNBT.getCompoundTag("undercrop")); generations = new ArrayList<>(); for (int i = 0; i < aNBT.getInteger("generationscount"); i++) { generations.add(new ArrayList<>()); for (int j = 0; j < aNBT.getInteger("generation." + i + ".count"); j++) generations.get(i) - .add(ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("generation." + i + "." + j))); + .add(readItemStackFromNBT(aNBT.getCompoundTag("generation." + i + "." + j))); } growthticks = aNBT.getInteger("growthticks"); noHumidity = aNBT.getBoolean("noHumidity"); diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java index baabda32..43fea0f1 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java @@ -38,6 +38,8 @@ import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; import static kubatech.api.Variables.StructureHologram; import static kubatech.api.Variables.buildAuthorList; +import static kubatech.api.utils.ItemUtils.readItemStackFromNBT; +import static kubatech.api.utils.ItemUtils.writeItemStackToNBT; import java.io.IOException; import java.lang.ref.WeakReference; @@ -1126,7 +1128,7 @@ public void generate(World world, float t) { } public BeeSimulator(NBTTagCompound tag) { - queenStack = ItemStack.loadItemStackFromNBT(tag.getCompoundTag("queenStack")); + queenStack = readItemStackFromNBT(tag.getCompoundTag("queenStack")); isValid = tag.getBoolean("isValid"); drops = new ArrayList<>(); specialDrops = new ArrayList<>(); @@ -1151,7 +1153,7 @@ public BeeSimulator(NBTTagCompound tag) { public NBTTagCompound toNBTTagCompound() { NBTTagCompound tag = new NBTTagCompound(); - tag.setTag("queenStack", queenStack.writeToNBT(new NBTTagCompound())); + tag.setTag("queenStack", writeItemStackToNBT(queenStack)); tag.setBoolean("isValid", isValid); tag.setInteger("dropssize", drops.size()); for (int i = 0; i < drops.size(); i++) tag.setTag( @@ -1244,7 +1246,7 @@ public ItemStack get(int amount) { } public BeeDrop(NBTTagCompound tag) { - stack = ItemStack.loadItemStackFromNBT(tag.getCompoundTag("stack")); + stack = readItemStackFromNBT(tag.getCompoundTag("stack")); chance = tag.getFloat("chance"); beeSpeed = tag.getFloat("beeSpeed"); t = tag.getFloat("t"); @@ -1254,7 +1256,7 @@ public BeeDrop(NBTTagCompound tag) { public NBTTagCompound toNBTTagCompound() { NBTTagCompound tag = new NBTTagCompound(); - tag.setTag("stack", stack.writeToNBT(new NBTTagCompound())); + tag.setTag("stack", writeItemStackToNBT(stack)); tag.setFloat("chance", chance); tag.setFloat("beeSpeed", beeSpeed); tag.setFloat("t", t); From c85e544a059a6de43ee48867beaac25e06efd254 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Thu, 15 Jun 2023 12:08:55 +0200 Subject: [PATCH 21/26] Update kubatech.java --- src/main/java/kubatech/kubatech.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java index 994ba28e..6cb6bd29 100644 --- a/src/main/java/kubatech/kubatech.java +++ b/src/main/java/kubatech/kubatech.java @@ -116,7 +116,7 @@ public void displayAllReleventItems(List p_78018_1_) { @SidedProxy(clientSide = Tags.MODID + ".ClientProxy", serverSide = Tags.MODID + ".CommonProxy") public static CommonProxy proxy; - private static Collection myClasses; + public static Collection myClasses; @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { @@ -131,7 +131,7 @@ public void preInit(FMLPreInitializationEvent event) { throw new RuntimeException(e); } final long timeToLoad = System.currentTimeMillis() - timeStart; - info("Class discovery took " + timeToLoad + "ms !"); + info("Class discovery took " + timeToLoad + "ms ! Found " + myClasses.size() + " classes."); proxy.preInit(event); } From b91f9ba5a7d1e32ad11c4d7499882dfb7cbd002f Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Thu, 15 Jun 2023 13:02:39 +0200 Subject: [PATCH 22/26] Update CommonProxy.java --- src/main/java/kubatech/CommonProxy.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/kubatech/CommonProxy.java b/src/main/java/kubatech/CommonProxy.java index 6799ed85..267efdab 100644 --- a/src/main/java/kubatech/CommonProxy.java +++ b/src/main/java/kubatech/CommonProxy.java @@ -36,12 +36,7 @@ import cpw.mods.fml.common.event.FMLServerStoppedEvent; import cpw.mods.fml.common.event.FMLServerStoppingEvent; import kubatech.api.LoaderReference; -import kubatech.commands.CommandBees; -import kubatech.commands.CommandConfig; -import kubatech.commands.CommandCustomDrops; import kubatech.commands.CommandHandler; -import kubatech.commands.CommandHelp; -import kubatech.commands.CommandTea; import kubatech.config.Config; import kubatech.loaders.MTLoader; import kubatech.loaders.RecipeLoader; From cd6584c200529d2ce45b1ac9564ba044bf8b4916 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Thu, 15 Jun 2023 16:09:08 +0200 Subject: [PATCH 23/26] Unnecessary qualified reference --- .../java/kubatech/mixin/mixins/minecraft/LocaleMixin.java | 4 ++-- .../kubatech/mixin/mixins/minecraft/StringTranslateMixin.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java index 45a7c2e1..e591878c 100644 --- a/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java +++ b/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java @@ -19,7 +19,7 @@ public class LocaleMixin { @ModifyArg( - method = "Lnet/minecraft/client/resources/Locale;loadLocaleDataFiles(Lnet/minecraft/client/resources/IResourceManager;Ljava/util/List;)V", + method = "loadLocaleDataFiles", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/resources/IResourceManager;getAllResources(Lnet/minecraft/util/ResourceLocation;)Ljava/util/List;"), @@ -31,7 +31,7 @@ private ResourceLocation loadLocaleDataFiles(ResourceLocation resourceLocation) } @Redirect( - method = "Lnet/minecraft/client/resources/Locale;loadLocaleData(Ljava/io/InputStream;)V", + method = "loadLocaleData(Ljava/io/InputStream;)V", at = @At( value = "INVOKE", target = "Ljava/util/regex/Matcher;replaceAll(Ljava/lang/String;)Ljava/lang/String;", diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java index 6c276108..2841ccc0 100644 --- a/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java +++ b/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java @@ -17,7 +17,7 @@ public class StringTranslateMixin { @Redirect( - method = "Lnet/minecraft/util/StringTranslate;parseLangFile(Ljava/io/InputStream;)Ljava/util/HashMap;", + method = "parseLangFile", at = @At( value = "INVOKE", target = "Ljava/util/regex/Matcher;replaceAll(Ljava/lang/String;)Ljava/lang/String;", From 2d52178eb92259eb5a6050ba2a3152d1d0a7b114 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Thu, 15 Jun 2023 16:13:13 +0200 Subject: [PATCH 24/26] Simplify ItemUtils --- .../java/kubatech/api/utils/ItemUtils.java | 19 +++++-------------- src/main/java/kubatech/mixin/Mixin.java | 1 - .../mixins/minecraft/ItemStackAccessor.java | 18 ------------------ 3 files changed, 5 insertions(+), 33 deletions(-) delete mode 100644 src/main/java/kubatech/mixin/mixins/minecraft/ItemStackAccessor.java diff --git a/src/main/java/kubatech/api/utils/ItemUtils.java b/src/main/java/kubatech/api/utils/ItemUtils.java index c30a67e0..2fc34057 100644 --- a/src/main/java/kubatech/api/utils/ItemUtils.java +++ b/src/main/java/kubatech/api/utils/ItemUtils.java @@ -1,34 +1,25 @@ package kubatech.api.utils; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import kubatech.mixin.mixins.minecraft.ItemStackAccessor; - public class ItemUtils { public static NBTTagCompound writeItemStackToNBT(ItemStack stack) { NBTTagCompound compound = new NBTTagCompound(); - compound.setInteger("id", Item.getIdFromItem(((ItemStackAccessor) (Object) stack).getItem())); - compound.setInteger("Count", stack.stackSize); - compound.setInteger("Damage", ((ItemStackAccessor) (Object) stack).getItemDamage()); - - if (stack.stackTagCompound != null) compound.setTag("tag", stack.stackTagCompound); + stack.writeToNBT(compound); + compound.setInteger("IntCount", stack.stackSize); return compound; } public static ItemStack readItemStackFromNBT(NBTTagCompound compound) { - if (compound.hasKey("id", 2)) return ItemStack.loadItemStackFromNBT(compound); + ItemStack stack = ItemStack.loadItemStackFromNBT(compound); - ItemStack stack = new ItemStack( - Item.getItemById(compound.getInteger("id")), - compound.getInteger("Count"), - compound.getInteger("Damage")); + if (stack == null) return null; - if (compound.hasKey("tag", 10)) stack.stackTagCompound = compound.getCompoundTag("tag"); + if (compound.hasKey("IntCount")) stack.stackSize = compound.getInteger("IntCount"); return stack; } diff --git a/src/main/java/kubatech/mixin/Mixin.java b/src/main/java/kubatech/mixin/Mixin.java index a33edc7e..a9f61e9b 100644 --- a/src/main/java/kubatech/mixin/Mixin.java +++ b/src/main/java/kubatech/mixin/Mixin.java @@ -22,7 +22,6 @@ public enum Mixin { StringTranslateMixin("minecraft.StringTranslateMixin", VANILLA), LanguageRegistryMixin("minecraft.LanguageRegistryMixin", VANILLA), LocaleMixin("minecraft.LocaleMixin", Side.CLIENT, VANILLA), - ItemStackAccessor("minecraft.ItemStackAccessor", VANILLA), // Infernal Mobs InfernalMobsCoreAccessor("InfernalMobs.InfernalMobsCoreAccessor", INFERNAL_MOBS), diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/ItemStackAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/ItemStackAccessor.java deleted file mode 100644 index 8a758d1f..00000000 --- a/src/main/java/kubatech/mixin/mixins/minecraft/ItemStackAccessor.java +++ /dev/null @@ -1,18 +0,0 @@ -package kubatech.mixin.mixins.minecraft; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(value = ItemStack.class) -public interface ItemStackAccessor { - - @Accessor(value = "field_151002_e", remap = false) - Item getItem(); - - @Accessor - int getItemDamage(); - -} From 74331d172cbd48902888e4e878baf83f0ca63b95 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Thu, 15 Jun 2023 16:14:44 +0200 Subject: [PATCH 25/26] Check if single player diffrently --- src/main/java/kubatech/commands/CommandBees.java | 5 ++--- src/main/java/kubatech/commands/CommandCustomDrops.java | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/kubatech/commands/CommandBees.java b/src/main/java/kubatech/commands/CommandBees.java index 69862b41..edf3b04c 100644 --- a/src/main/java/kubatech/commands/CommandBees.java +++ b/src/main/java/kubatech/commands/CommandBees.java @@ -28,7 +28,6 @@ import java.nio.charset.StandardCharsets; import java.util.List; -import net.minecraft.client.Minecraft; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.item.ItemStack; @@ -40,6 +39,7 @@ import forestry.api.apiculture.IAlleleBeeSpecies; import forestry.api.apiculture.IBee; import forestry.api.apiculture.IBeeGenome; +import kubatech.api.utils.ModUtils; @CommandHandler.ChildCommand public class CommandBees extends CommandBase { @@ -63,8 +63,7 @@ public int getRequiredPermissionLevel() { @Override public void processCommand(ICommandSender p_71515_1_, String[] p_71515_2_) { - if (!Minecraft.getMinecraft() - .isSingleplayer()) { + if (!ModUtils.isClientSided) { p_71515_1_ .addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "This command is single-player only!")); return; diff --git a/src/main/java/kubatech/commands/CommandCustomDrops.java b/src/main/java/kubatech/commands/CommandCustomDrops.java index 06764991..80148eb7 100644 --- a/src/main/java/kubatech/commands/CommandCustomDrops.java +++ b/src/main/java/kubatech/commands/CommandCustomDrops.java @@ -22,12 +22,12 @@ import java.io.File; -import net.minecraft.client.Minecraft; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; +import kubatech.api.utils.ModUtils; import kubatech.loaders.MobRecipeLoader; @CommandHandler.ChildCommand @@ -51,8 +51,7 @@ public int getRequiredPermissionLevel() { @Override public void processCommand(ICommandSender p_71515_1_, String[] p_71515_2_) { - if (!Minecraft.getMinecraft() - .isSingleplayer()) { + if (!ModUtils.isClientSided) { p_71515_1_ .addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "This command is single-player only!")); return; From 08b21f597e4ddcc97bdbf4355867c1317aa07163 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Thu, 15 Jun 2023 17:43:21 +0200 Subject: [PATCH 26/26] Remove accessor for infernal-mobs --- dependencies.gradle | 2 +- .../kubatech/loaders/MobRecipeLoader.java | 11 ++-- src/main/java/kubatech/mixin/Mixin.java | 4 -- src/main/java/kubatech/mixin/TargetedMod.java | 1 - .../InfernalMobsCoreAccessor.java | 57 ------------------- src/main/java/kubatech/nei/Mob_Handler.java | 7 +-- 6 files changed, 9 insertions(+), 73 deletions(-) delete mode 100644 src/main/java/kubatech/mixin/mixins/InfernalMobs/InfernalMobsCoreAccessor.java diff --git a/dependencies.gradle b/dependencies.gradle index f7a9fc0b..67de4021 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -40,7 +40,7 @@ dependencies { api("com.github.GTNewHorizons:EnderIO:2.4.18:dev") api("com.github.GTNewHorizons:ForestryMC:4.6.7:dev") api("com.github.GTNewHorizons:ModularUI:1.1.10:dev") - devOnlyNonPublishable("com.github.GTNewHorizons:Infernal-Mobs:1.7.8-GTNH:dev") + devOnlyNonPublishable("com.github.GTNewHorizons:Infernal-Mobs:1.7.9-GTNH:dev") //compileOnly("curse.maven:extrautilities-225561:2264384") { // transitive = false //} diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 9d287f46..da54d441 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -91,7 +91,6 @@ import kubatech.api.utils.ModUtils.TriConsumer; import kubatech.config.Config; import kubatech.config.OverridesConfig; -import kubatech.mixin.mixins.InfernalMobs.InfernalMobsCoreAccessor; import kubatech.mixin.mixins.minecraft.EntityAccessor; import kubatech.mixin.mixins.minecraft.EntityLivingAccessor; import kubatech.mixin.mixins.minecraft.EntityLivingBaseAccessor; @@ -165,7 +164,7 @@ public static MobRecipe generateMobRecipe(EntityLiving e, String entityID, Array @SuppressWarnings("unchecked") private MobRecipe(EntityLiving e, String entityID, ArrayList outputs) { if (LoaderReference.InfernalMobs) { - InfernalMobsCoreAccessor infernalMobsCore = (InfernalMobsCoreAccessor) InfernalMobsCore.instance(); + InfernalMobsCore infernalMobsCore = InfernalMobsCore.instance(); if (infernaldrops == null) { infernaldrops = new droplist(); LOG.info("Generating Infernal drops"); @@ -181,7 +180,7 @@ private MobRecipe(EntityLiving e, String entityID, ArrayList outputs) { i++; } if (i > 0) { - double chance = infernalMobsCore.callCheckEntityClassForced(e) ? 1d + double chance = infernalMobsCore.checkEntityClassForced(e) ? 1d : (1d / infernalMobsCore.getEliteRarity()); ArrayList elitelist = infernalMobsCore.getDropIdListElite(); for (ItemStack stack : elitelist) { @@ -214,8 +213,8 @@ private MobRecipe(EntityLiving e, String entityID, ArrayList outputs) { } } } - infernalityAllowed = infernalMobsCore.callIsClassAllowed(e); - alwaysinfernal = infernalMobsCore.callCheckEntityClassForced(e); + infernalityAllowed = infernalMobsCore.isClassAllowed(e); + alwaysinfernal = infernalMobsCore.checkEntityClassForced(e); } else { infernalityAllowed = false; alwaysinfernal = false; @@ -281,7 +280,7 @@ public ItemStack[] generateOutputs(Random rnd, GT_MetaTileEntity_ExtremeExtermin } if (LoaderReference.InfernalMobs) { - InfernalMobsCoreAccessor infernalMobsCore = (InfernalMobsCoreAccessor) InfernalMobsCore.instance(); + InfernalMobsCore infernalMobsCore = InfernalMobsCore.instance(); if (infernalityAllowed && mEUt * 8 < MTE.getMaxInputVoltage() && !infernalMobsCore.getDimensionBlackList() .contains( diff --git a/src/main/java/kubatech/mixin/Mixin.java b/src/main/java/kubatech/mixin/Mixin.java index a9f61e9b..19e3b326 100644 --- a/src/main/java/kubatech/mixin/Mixin.java +++ b/src/main/java/kubatech/mixin/Mixin.java @@ -1,6 +1,5 @@ package kubatech.mixin; -import static kubatech.mixin.TargetedMod.INFERNAL_MOBS; import static kubatech.mixin.TargetedMod.VANILLA; import java.util.Arrays; @@ -23,9 +22,6 @@ public enum Mixin { LanguageRegistryMixin("minecraft.LanguageRegistryMixin", VANILLA), LocaleMixin("minecraft.LocaleMixin", Side.CLIENT, VANILLA), - // Infernal Mobs - InfernalMobsCoreAccessor("InfernalMobs.InfernalMobsCoreAccessor", INFERNAL_MOBS), - ; public final String mixinClass; diff --git a/src/main/java/kubatech/mixin/TargetedMod.java b/src/main/java/kubatech/mixin/TargetedMod.java index aa593714..65717c7e 100644 --- a/src/main/java/kubatech/mixin/TargetedMod.java +++ b/src/main/java/kubatech/mixin/TargetedMod.java @@ -7,7 +7,6 @@ public enum TargetedMod { VANILLA("Minecraft", "unused", true), - INFERNAL_MOBS("InfernalMobs", "InfernalMobs-", true), ; diff --git a/src/main/java/kubatech/mixin/mixins/InfernalMobs/InfernalMobsCoreAccessor.java b/src/main/java/kubatech/mixin/mixins/InfernalMobs/InfernalMobsCoreAccessor.java deleted file mode 100644 index e0a87e63..00000000 --- a/src/main/java/kubatech/mixin/mixins/InfernalMobs/InfernalMobsCoreAccessor.java +++ /dev/null @@ -1,57 +0,0 @@ -package kubatech.mixin.mixins.InfernalMobs; - -import java.util.ArrayList; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.gen.Invoker; - -import atomicstryker.infernalmobs.common.InfernalMobsCore; -import atomicstryker.infernalmobs.common.mods.api.ModifierLoader; - -@Mixin(value = InfernalMobsCore.class, remap = false) -public interface InfernalMobsCoreAccessor { - - @Invoker - boolean callIsClassAllowed(EntityLivingBase entity); - - @Invoker - boolean callCheckEntityClassForced(EntityLivingBase entity); - - @Accessor - ArrayList> getModifierLoaders(); - - @Accessor - int getEliteRarity(); - - @Accessor - int getUltraRarity(); - - @Accessor - int getInfernoRarity(); - - @Accessor - int getMinEliteModifiers(); - - @Accessor - int getMinUltraModifiers(); - - @Accessor - int getMinInfernoModifiers(); - - @Accessor - ArrayList getDimensionBlackList(); - - @Accessor - ArrayList getDropIdListElite(); - - @Accessor - ArrayList getDropIdListUltra(); - - @Accessor - ArrayList getDropIdListInfernal(); - -} diff --git a/src/main/java/kubatech/nei/Mob_Handler.java b/src/main/java/kubatech/nei/Mob_Handler.java index 5d4a8da8..10f932ec 100644 --- a/src/main/java/kubatech/nei/Mob_Handler.java +++ b/src/main/java/kubatech/nei/Mob_Handler.java @@ -91,7 +91,6 @@ import kubatech.config.Config; import kubatech.kubatech; import kubatech.loaders.MobRecipeLoader; -import kubatech.mixin.mixins.InfernalMobs.InfernalMobsCoreAccessor; import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber; public class Mob_Handler extends TemplateRecipeHandler { @@ -590,9 +589,9 @@ public MobCachedRecipe(EntityLiving mob, List mOutputs, int if (!LoaderReference.InfernalMobs) infernaltype = -1; // not supported else { - InfernalMobsCoreAccessor infernalMobsCore = (InfernalMobsCoreAccessor) InfernalMobsCore.instance(); - if (!infernalMobsCore.callIsClassAllowed(mob)) infernaltype = 0; // not allowed - else if (infernalMobsCore.callCheckEntityClassForced(mob)) infernaltype = 2; // forced + InfernalMobsCore infernalMobsCore = InfernalMobsCore.instance(); + if (!infernalMobsCore.isClassAllowed(mob)) infernaltype = 0; // not allowed + else if (infernalMobsCore.checkEntityClassForced(mob)) infernaltype = 2; // forced else infernaltype = 1; // normal } }