Static modifier

本文通过一个简单的Java示例展示了如何使用静态字段,并解释了在不同对象间共享静态变量的行为。程序创建了两个Static类的实例,修改了一个实例的静态字段并观察到另一个实例的变化,以此说明静态字段在所有实例中共享同一份拷贝。

public class Static {
    static int x = 0 ;
    public static void main(String[] args) {
        Static a = new Static();
        Static b = new Static();
        System.out.println(b.x);
        a.x = 1;
        System.out.println(b.x);
    }
}

 

result:

0

1

 

The following warning is ignored anyway...

The static field Static.x should be accessed in a static way

// // 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文件
09-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值