//
// Decompiled by Jadx - 611ms
//
package slimeknights.tconstruct.tools;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.minecraft.entity.EnumCreatureAttribute;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntitySkeleton;
import net.minecraft.entity.monster.EntityWitherSkeleton;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.potion.Potion;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.apache.logging.log4j.Logger;
import org.junit.Ignore;
import slimeknights.mantle.pulsar.pulse.Pulse;
import slimeknights.mantle.util.RecipeMatch;
import slimeknights.tconstruct.common.CommonProxy;
import slimeknights.tconstruct.gadgets.item.ItemPiggybackPack;
import slimeknights.tconstruct.library.TinkerRegistry;
import slimeknights.tconstruct.library.Util;
import slimeknights.tconstruct.library.materials.Material;
import slimeknights.tconstruct.library.modifiers.Modifier;
import slimeknights.tconstruct.library.tinkering.PartMaterialType;
import slimeknights.tconstruct.library.tools.IToolPart;
import slimeknights.tconstruct.library.tools.ToolCore;
import slimeknights.tconstruct.shared.TinkerCommons;
import slimeknights.tconstruct.tools.modifiers.ModAntiMonsterType;
import slimeknights.tconstruct.tools.modifiers.ModBeheading;
import slimeknights.tconstruct.tools.modifiers.ModBlasting;
import slimeknights.tconstruct.tools.modifiers.ModCreative;
import slimeknights.tconstruct.tools.modifiers.ModDiamond;
import slimeknights.tconstruct.tools.modifiers.ModEmerald;
import slimeknights.tconstruct.tools.modifiers.ModExtraTrait;
import slimeknights.tconstruct.tools.modifiers.ModFiery;
import slimeknights.tconstruct.tools.modifiers.ModFins;
import slimeknights.tconstruct.tools.modifiers.ModFortify;
import slimeknights.tconstruct.tools.modifiers.ModGlowing;
import slimeknights.tconstruct.tools.modifiers.ModHarvestSize;
import slimeknights.tconstruct.tools.modifiers.ModHaste;
import slimeknights.tconstruct.tools.modifiers.ModKnockback;
import slimeknights.tconstruct.tools.modifiers.ModLuck;
import slimeknights.tconstruct.tools.modifiers.ModMendingMoss;
import slimeknights.tconstruct.tools.modifiers.ModNecrotic;
import slimeknights.tconstruct.tools.modifiers.ModReinforced;
import slimeknights.tconstruct.tools.modifiers.ModSharpness;
import slimeknights.tconstruct.tools.modifiers.ModShulking;
import slimeknights.tconstruct.tools.modifiers.ModSilktouch;
import slimeknights.tconstruct.tools.modifiers.ModSoulbound;
import slimeknights.tconstruct.tools.modifiers.ModWebbed;
import slimeknights.tconstruct.tools.traits.InfiTool;
@Pulse(description = "All the modifiers in one handy package", forced = true, id = TinkerModifiers.PulseId, pulsesRequired = "TinkerTools")
public class TinkerModifiers extends AbstractToolPulse {
public static List<Modifier> extraTraitMods;
public static List<Modifier> fortifyMods;
public static Modifier modBaneOfArthopods;
public static Modifier modBeheading;
public static Modifier modBlasting;
public static Modifier modCreative;
public static Modifier modDiamond;
public static Modifier modEmerald;
public static Modifier modFiery;
public static Modifier modFins;
public static Modifier modGlowing;
public static Modifier modHarvestHeight;
public static Modifier modHarvestWidth;
public static Modifier modHaste;
public static Modifier modKnockback;
public static ModLuck modLuck;
public static Modifier modMendingMoss;
public static Modifier modNecrotic;
public static Modifier modReinforced;
public static Modifier modSharpness;
public static Modifier modShulking;
public static Modifier modSilktouch;
public static Modifier modSmite;
public static Modifier modSoulbound;
public static Modifier modWebbed;
@SidedProxy(clientSide = "slimeknights.tconstruct.tools.ToolClientProxy", serverSide = "slimeknights.tconstruct.common.CommonProxy")
public static CommonProxy proxy;
private Map<String, ModExtraTrait> extraTraitLookup = new HashMap();
public static final String PulseId = "TinkerModifiers";
public static final Logger log = Util.getLogger(PulseId);
@SubscribeEvent
public void registerPotions(RegistryEvent.Register<Potion> register) {
register.getRegistry().register(ItemPiggybackPack.CarryPotionEffect.INSTANCE);
}
protected void registerModifiers() {
ItemStack itemStack = new ItemStack(Blocks.field_150335_W);
ItemStack itemStack2 = new ItemStack(Items.field_151114_aO);
modBaneOfArthopods = new ModAntiMonsterType("bane_of_arthopods", 6404681, 5, 24, EnumCreatureAttribute.ARTHROPOD);
modBaneOfArthopods = registerModifier(modBaneOfArthopods);
modBaneOfArthopods.addItem(Items.field_151071_bq);
modBeheading = registerModifier(new ModBeheading());
modBeheading.addRecipeMatch(new RecipeMatch.ItemCombination(1, new ItemStack[]{new ItemStack(Items.field_151079_bi), new ItemStack(Blocks.field_150343_Z)}));
modBlasting = registerModifier(new ModBlasting());
modBlasting.addRecipeMatch(new RecipeMatch.ItemCombination(1, new ItemStack[]{itemStack, itemStack, itemStack}));
modDiamond = registerModifier(new ModDiamond());
modDiamond.addItem("gemDiamond");
modEmerald = registerModifier(new ModEmerald());
modEmerald.addItem("gemEmerald");
modFiery = registerModifier(new ModFiery());
modFiery.addItem(Items.field_151065_br);
modFins = registerModifier(new ModFins());
modFins.addItem("fish", 2, 1);
modGlowing = registerModifier(new ModGlowing());
modGlowing.addRecipeMatch(new RecipeMatch.ItemCombination(1, new ItemStack[]{itemStack2, new ItemStack(Items.field_151061_bv), itemStack2}));
modHaste = registerModifier(new ModHaste(50));
modHaste.addItem("dustRedstone");
modHaste.addItem("blockRedstone", 1, 9);
modHarvestWidth = registerModifier(new ModHarvestSize("width"));
modHarvestWidth.addItem(TinkerCommons.matExpanderW, 1, 1);
modHarvestHeight = registerModifier(new ModHarvestSize("height"));
modHarvestHeight.addItem(TinkerCommons.matExpanderH, 1, 1);
modKnockback = registerModifier(new ModKnockback());
modKnockback.addItem(Blocks.field_150331_J, 1);
modKnockback.addItem(Blocks.field_150320_F, 1);
modLuck = registerModifier(new ModLuck());
modLuck.addItem("gemLapis");
modLuck.addItem("blockLapis", 1, 9);
modMendingMoss = registerModifier(new ModMendingMoss());
modMendingMoss.addItem(TinkerCommons.matMendingMoss, 1, 1);
modNecrotic = registerModifier(new ModNecrotic());
modNecrotic.addItem("boneWithered");
modReinforced = registerModifier(new ModReinforced());
modReinforced.addItem(TinkerCommons.matReinforcement, 1, 1);
modSharpness = registerModifier(new ModSharpness(72));
modSharpness.addItem("gemQuartz");
modSharpness.addItem("blockQuartz", 1, 4);
modShulking = registerModifier(new ModShulking());
modShulking.addItem(Items.field_185162_cT);
modSilktouch = registerModifier(new ModSilktouch());
modSilktouch.addItem(TinkerCommons.matSilkyJewel, 1, 1);
modWebbed = registerModifier(new ModWebbed());
modWebbed.addItem(Blocks.field_150321_G, 1);
modSmite = new ModAntiMonsterType("smite", 15258880, 5, 24, EnumCreatureAttribute.UNDEAD);
modSmite = registerModifier(modSmite);
modSmite.addItem(TinkerCommons.consecratedSoil, 1, 1);
modSoulbound = registerModifier(new ModSoulbound());
modSoulbound.addItem(Items.field_151156_bN);
modCreative = registerModifier(new ModCreative());
modCreative.addItem(TinkerCommons.matCreativeModifier, 1, 1);
TinkerRegistry.addTrait(InfiTool.INSTANCE);
}
@Ignore
// 修复后的安全实现
private void registerFortifyModifiers() {
fortifyMods = new ArrayList<>();
for (Material material : TinkerRegistry.getAllMaterialsWithStats("head")) {
// 添加空指针和类型安全校验
if (material != null) {
fortifyMods.add(new ModFortify(material, 10, 0.5f));
} else {
log.warn("Skipping null material in fortify registration");
}
}
}
private void registerMobHeadDrops() {
TinkerRegistry.registerHeadDrop(EntitySkeleton.class, new ItemStack(Items.field_151144_bL, 1, 0));
TinkerRegistry.registerHeadDrop(EntityWitherSkeleton.class, new ItemStack(Items.field_151144_bL, 1, 1));
TinkerRegistry.registerHeadDrop(EntityZombie.class, new ItemStack(Items.field_151144_bL, 1, 2));
TinkerRegistry.registerHeadDrop(EntityCreeper.class, new ItemStack(Items.field_151144_bL, 1, 4));
TinkerRegistry.registerHeadDrop(EntityPlayerMP.class, entityLivingBase -> {
ItemStack itemStack = new ItemStack(Items.field_151144_bL, 1, 3);
if (entityLivingBase instanceof EntityPlayer) {
NBTUtil.func_180708_a(itemStack.func_190925_c("SkullOwner"), ((EntityPlayer) entityLivingBase).func_146103_bH());
}
return itemStack;
});
}
private void registerExtraTraitModifiers() {
TinkerRegistry.getAllMaterials().forEach(this::registerExtraTraitModifiers);
extraTraitMods = Lists.newArrayList(this.extraTraitLookup.values());
}
private void registerExtraTraitModifiers(Material material) {
TinkerRegistry.getTools().forEach(toolCore -> {
registerExtraTraitModifiers(material, toolCore);
});
}
private void registerExtraTraitModifiers(Material material, ToolCore toolCore) {
toolCore.getRequiredComponents().forEach(partMaterialType -> {
registerExtraTraitModifiers(material, toolCore, partMaterialType);
});
}
private void registerExtraTraitModifiers(Material material, ToolCore toolCore, PartMaterialType partMaterialType) {
partMaterialType.getPossibleParts().forEach(iToolPart -> {
registerExtraTraitModifiers(material, toolCore, partMaterialType, iToolPart);
});
}
private <T extends Item & IToolPart> void registerExtraTraitModifiers(Material material, ToolCore toolCore, PartMaterialType partMaterialType, IToolPart iToolPart) {
if (iToolPart instanceof Item) {
Collection applicableTraitsForMaterial = partMaterialType.getApplicableTraitsForMaterial(material);
if (!applicableTraitsForMaterial.isEmpty()) {
ImmutableSet copyOf = ImmutableSet.copyOf(applicableTraitsForMaterial);
String generateIdentifier = ModExtraTrait.generateIdentifier(material, copyOf);
this.extraTraitLookup.computeIfAbsent(generateIdentifier, str -> {
return new ModExtraTrait(material, copyOf, generateIdentifier);
}).addCombination(toolCore, (Item) iToolPart);
}
}
}
}
转为class文件