diff --git a/src/main/java/com/xir/NHUtilities/common/entity/EntityTimeAccelerator.java b/src/main/java/com/xir/NHUtilities/common/entity/EntityTimeAccelerator.java index 2ab0d39..b1c43cb 100644 --- a/src/main/java/com/xir/NHUtilities/common/entity/EntityTimeAccelerator.java +++ b/src/main/java/com/xir/NHUtilities/common/entity/EntityTimeAccelerator.java @@ -1,5 +1,7 @@ package com.xir.NHUtilities.common.entity; +import static com.xir.NHUtilities.config.Config.accelerateBlockInterval; +import static com.xir.NHUtilities.config.Config.enableBlockMode; import static com.xir.NHUtilities.config.Config.enableTimeAcceleratorBoost; import static com.xir.NHUtilities.main.NHUtilities.LOG; @@ -21,11 +23,16 @@ public class EntityTimeAccelerator extends Entity { // region Fields protected int timeRate = enableTimeAcceleratorBoost ? 8 : 4; // must be set in here for texture render init protected int remainingTime = 600; + protected boolean isGregTechMachineMode = true; protected int targetIntX; protected int targetIntY; protected int targetIntZ; + public void setGregTechMachineMode(boolean setMode) { + this.isGregTechMachineMode = setMode; + } + public int getTimeRate() { return timeRate; } @@ -50,7 +57,8 @@ public EntityTimeAccelerator(World worldIn) { super(worldIn); this.noClip = true; this.preventEntitySpawning = false; - this.setSize(0.1F, 0.1F); + // this entity setting must modify with TimeVial field double tHalfSize = 0.05D + this.setSize(0.02F, 0.02F); this.dataWatcher.addObject(2, timeRate); } @@ -78,7 +86,7 @@ private void tAccelerate() { // Referenced GTNH to control the performance in 1ms long tMaxTime = System.nanoTime() + 1000000; if (shouldAccelerate(tileEntity)) { - if (tileEntity instanceof ITileEntityTickAcceleration tileEntityITEA) { + if (isGregTechMachineMode && tileEntity instanceof ITileEntityTickAcceleration tileEntityITEA) { if (tileEntityITEA.tickAcceleration(timeRate)) return; } accelerateTileEntity(tileEntity, tMaxTime); @@ -120,7 +128,9 @@ private boolean shouldAccelerate(TileEntity tileEntity) { } private boolean shouldAccelerate(Block block) { - return block != null && block.getTickRandomly() && worldObj.getTotalWorldTime() % 10 == 0; + return enableBlockMode && block != null + && block.getTickRandomly() + && worldObj.getTotalWorldTime() % accelerateBlockInterval == 0; } // endregion @@ -129,6 +139,7 @@ private boolean shouldAccelerate(Block block) { public void readEntityFromNBT(@NotNull NBTTagCompound tagCompound) { timeRate = tagCompound.getInteger("timeRate"); this.dataWatcher.updateObject(2, tagCompound.getInteger("timeRate")); + isGregTechMachineMode = tagCompound.getBoolean("isGregTechMachineMode"); targetIntX = tagCompound.getInteger("targetIntX"); targetIntY = tagCompound.getInteger("targetIntY"); targetIntZ = tagCompound.getInteger("targetIntZ"); @@ -138,6 +149,7 @@ public void readEntityFromNBT(@NotNull NBTTagCompound tagCompound) { @Override public void writeEntityToNBT(@NotNull NBTTagCompound tagCompound) { tagCompound.setInteger("timeRate", timeRate); + tagCompound.setBoolean("isGregTechMachineMode", isGregTechMachineMode); tagCompound.setInteger("targetIntX", targetIntX); tagCompound.setInteger("targetIntY", targetIntY); tagCompound.setInteger("targetIntZ", targetIntZ); diff --git a/src/main/java/com/xir/NHUtilities/common/items/ModsItemsList.java b/src/main/java/com/xir/NHUtilities/common/items/ModsItemsList.java index 68eae91..a73ba84 100644 --- a/src/main/java/com/xir/NHUtilities/common/items/ModsItemsList.java +++ b/src/main/java/com/xir/NHUtilities/common/items/ModsItemsList.java @@ -3,6 +3,7 @@ import com.xir.NHUtilities.common.items.aItemCore.ItemBasic; import com.xir.NHUtilities.common.items.baubles.GluttonyRing; import com.xir.NHUtilities.common.items.baubles.HungerRing; +import com.xir.NHUtilities.common.items.timeVial.EternityVial; import com.xir.NHUtilities.common.items.timeVial.TimeVial; public class ModsItemsList { @@ -10,4 +11,5 @@ public class ModsItemsList { public static final ItemBasic gluttonyRing = new GluttonyRing(); public static final ItemBasic hungerRing = new HungerRing(); public static final ItemBasic timeVial = new TimeVial(); + public static final TimeVial eternityVial = new EternityVial(); } diff --git a/src/main/java/com/xir/NHUtilities/common/items/timeVial/EternaBottle.java b/src/main/java/com/xir/NHUtilities/common/items/timeVial/EternaBottle.java deleted file mode 100644 index 433707f..0000000 --- a/src/main/java/com/xir/NHUtilities/common/items/timeVial/EternaBottle.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.xir.NHUtilities.common.items.timeVial; - -public class EternaBottle extends TimeVial { -} diff --git a/src/main/java/com/xir/NHUtilities/common/items/timeVial/EternityVial.java b/src/main/java/com/xir/NHUtilities/common/items/timeVial/EternityVial.java new file mode 100644 index 0000000..6afa310 --- /dev/null +++ b/src/main/java/com/xir/NHUtilities/common/items/timeVial/EternityVial.java @@ -0,0 +1,84 @@ +package com.xir.NHUtilities.common.items.timeVial; + +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import org.jetbrains.annotations.NotNull; + +import com.xir.NHUtilities.utils.TooltipsChroma; + +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import fox.spiteful.avaritia.items.LudicrousItems; + +// @Optional.Interface(iface = "fox.spiteful.avaritia.render.ICosmicRenderItem",modid = "Avaritia") +public class EternityVial extends TimeVial /* implements ICosmicRenderItem */ { + + // private IIcon cosmicMask; // to do ... + // private IIcon GTNH; + + public EternityVial() { + setMaxStackSize(1); + setUnlocalizedName("EternityVial"); + setTextureName("EternityVial"); + } + + // @Override + // @SideOnly(Side.CLIENT) + // public void registerIcons(IIconRegister register) { + // super.registerIcons(register); + // this.cosmicMask = register.registerIcon(NHUtilities.MODID + ":" + "EternityVial_mask3"); + // this.GTNH = register.registerIcon(NHUtilities.MODID + ":" + "icon_GTNH"); + // } + // + // @Override + // public IIcon getIcon(ItemStack stack, int pass) { + // if (pass == 1) { + // return this.GTNH; + // } + // + // return super.getIcon(stack, pass); + // } + + @Override + @Optional.Method(modid = "Avaritia") + public EnumRarity getRarity(ItemStack stack) { + return LudicrousItems.cosmic; + } + + @Override + @SideOnly(Side.CLIENT) + protected void getInfoFromNBT(@NotNull ItemStack stack, List list) { + list.add( + TooltipsChroma + .applyChromaEffect(StatCollector.translateToLocal("text.NHUtilities.EternityVial.details_0"))); + } + + @Override + protected void mergeSameVialTime(@NotNull EntityPlayer player, ItemStack stack) {} + + @Override + public void onUpdate(ItemStack stack, World worldIn, Entity playerIn, int slot, boolean isHeld) {} + + @Override + protected boolean shouldAndConsumeTimeData(@NotNull ItemStack stack, int consumedTick) { + return true; + } + + // @Override + // public IIcon getMaskTexture(ItemStack stack, EntityPlayer player) { + // return this.cosmicMask; + // } + // + // @Override + // public float getMaskMultiplier(ItemStack stack, EntityPlayer player) { + // return 1.0F; + // } +} diff --git a/src/main/java/com/xir/NHUtilities/common/items/timeVial/TimeVial.java b/src/main/java/com/xir/NHUtilities/common/items/timeVial/TimeVial.java index f35fc1a..bfbef60 100644 --- a/src/main/java/com/xir/NHUtilities/common/items/timeVial/TimeVial.java +++ b/src/main/java/com/xir/NHUtilities/common/items/timeVial/TimeVial.java @@ -6,6 +6,8 @@ import static com.xir.NHUtilities.config.Config.limitOneTimeVial; import static com.xir.NHUtilities.config.Config.timeVialDiscountValue; import static com.xir.NHUtilities.main.NHUtilities.LOG; +import static com.xir.NHUtilities.utils.InformationHelper.dividingLine; +import static com.xir.NHUtilities.utils.InformationHelper.holdShiftForDetails; import java.util.List; import java.util.Optional; @@ -16,6 +18,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; import org.jetbrains.annotations.NotNull; @@ -35,6 +38,7 @@ public class TimeVial extends ItemBasic { protected static final int MAX_ACCELERATION = enableTimeAcceleratorBoost ? 256 : 128; protected static final int NUMBER_EER = -846280; // ha,.... 114514 protected int storedTimeTick = 0; + protected final double tHalfSize = 0.01D; // 实体一半的大小 public TimeVial() { setMaxStackSize(1); @@ -46,6 +50,34 @@ public TimeVial() { @SideOnly(Side.CLIENT) public void addInformation(final @NotNull ItemStack stack, final EntityPlayer player, final List list, final boolean extraInformation) { + getInfoFromNBT(stack, list); + if (holdShiftForDetails(list)) { + list.add(dividingLine); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_0")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_1")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_2")); + list.add(dividingLine); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_3")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_4")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_5")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_6")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_7")); + list.add(dividingLine); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_7")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_8")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_9")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_10")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_11")); + list.add(dividingLine); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_12")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_13")); + list.add(StatCollector.translateToLocal("text.NHUtilities.TimeVial.details_14")); + list.add(dividingLine); + } + } + + @SideOnly(Side.CLIENT) + protected void getInfoFromNBT(@NotNull ItemStack stack, List list) { NBTTagCompound nbtTagCompound = stack.getTagCompound(); if (nbtTagCompound == null) nbtTagCompound = new NBTTagCompound(); int storedTimeSeconds = nbtTagCompound.getInteger("storedTimeTick") / 20; @@ -65,9 +97,6 @@ public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, @NotNull Wor double targetPosY = y + 0.5D; double targetPosZ = z + 0.5D; - // 实体一半的大小 - double tHalfSize = 0.05D; - // 碰撞箱的最小坐标 double minX = targetPosX - tHalfSize; double minY = targetPosY - tHalfSize; @@ -104,6 +133,7 @@ public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, @NotNull Wor } } else if (shouldAndConsumeTimeData(stack, TIME_INIT_RATE * 600)) { EntityTimeAccelerator eta = new EntityTimeAccelerator(world, x, y, z); + if (player.isSneaking()) eta.setGregTechMachineMode(false); eta.setPosition(targetPosX, targetPosY, targetPosZ); world.spawnEntityInWorld(eta); if (enableLogInfo) LOG.info( @@ -124,7 +154,7 @@ public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, @NotNull Wor return false; } - private boolean shouldAndConsumeTimeData(@NotNull ItemStack stack, int consumedTick) { + protected boolean shouldAndConsumeTimeData(@NotNull ItemStack stack, int consumedTick) { int timeTick = stack.getTagCompound() .getInteger("storedTimeTick"); if (timeTick >= consumedTick) { @@ -154,7 +184,7 @@ public void onUpdate(ItemStack stack, World worldIn, Entity playerIn, int slot, } } - private void mergeSameVialTime(@NotNull EntityPlayer player, ItemStack stack) { + protected void mergeSameVialTime(@NotNull EntityPlayer player, ItemStack stack) { for (ItemStack itemStack : player.inventory.mainInventory) { if (itemStack != null && itemStack.getItem() == this && itemStack != stack) { int thisTimeTick = stack.getTagCompound() diff --git a/src/main/java/com/xir/NHUtilities/config/Config.java b/src/main/java/com/xir/NHUtilities/config/Config.java index 235c675..dce61cb 100644 --- a/src/main/java/com/xir/NHUtilities/config/Config.java +++ b/src/main/java/com/xir/NHUtilities/config/Config.java @@ -24,12 +24,16 @@ public class Config { // region TimeVial public static boolean enableTimeVial = true; + public static boolean enableEternityVial = true; + public static boolean enableBlockMode = true; + public static int accelerateBlockInterval = 10; public static boolean enableLogInfo = false; public static boolean limitOneTimeVial = true; public static float timeVialDiscountValue = 0.9965F; // e.. public static float defaultTimeVialVolumeValue = 0.5F; public static boolean enableTimeAcceleratorBoost = false; public static boolean enableAccelerateGregTechMachine = true; + public static float accelerateGregTechMachineDiscount = 0.8F; public static boolean enableNumberMultiplierTexture = false; // endregion @@ -80,6 +84,10 @@ static File minecraftHome() { "enable GluttonyRing & AndHungerRing"); enableTimeVial = configuration .getBoolean("enableTimeVial", CATEGORY_TIME_VIAL, enableTimeVial, "enable Time Vial"); + enableEternityVial = configuration + .getBoolean("enableEternityVial", CATEGORY_TIME_VIAL, enableEternityVial, "enable Eternity Vial"); + enableBlockMode = configuration + .getBoolean("enableBlockMode", CATEGORY_TIME_VIAL, enableBlockMode, "enable Block Mode"); enableLogInfo = configuration .getBoolean("enableLogInfo", CATEGORY_TIME_VIAL, enableLogInfo, "enable log info debug"); limitOneTimeVial = configuration @@ -108,11 +116,25 @@ static File minecraftHome() { CATEGORY_TIME_VIAL, enableAccelerateGregTechMachine, "enable Accelerate GregTech Machine"); + accelerateGregTechMachineDiscount = configuration.getFloat( + "accelerateGregTechMachineDiscount", + CATEGORY_TIME_VIAL, + accelerateGregTechMachineDiscount, + 0.0F, + 1.0F, + "accelerate GregTech Machine Discount"); enableNumberMultiplierTexture = configuration.getBoolean( "enableNumberMultiplierTexture", CATEGORY_TIME_VIAL, enableNumberMultiplierTexture, "enable Number Multiplier Texture"); + accelerateBlockInterval = configuration.getInt( + "accelerateBlockInterval", + CATEGORY_TIME_VIAL, + accelerateBlockInterval, + 2, + 200, + "accelerate Block Interval"); } diff --git a/src/main/java/com/xir/NHUtilities/loader/EventLoader.java b/src/main/java/com/xir/NHUtilities/loader/EventLoader.java index 2afdc8d..9750d76 100644 --- a/src/main/java/com/xir/NHUtilities/loader/EventLoader.java +++ b/src/main/java/com/xir/NHUtilities/loader/EventLoader.java @@ -1,14 +1,15 @@ package com.xir.NHUtilities.loader; +import static com.xir.NHUtilities.config.Config.enableGluttonyRingAndHungerRing; + import net.minecraftforge.common.MinecraftForge; import com.xir.NHUtilities.common.events.GluttonyRingEvent; -import com.xir.NHUtilities.config.Config; public class EventLoader { public static void registerNHUtilitiesEvents() { - if (Config.enableGluttonyRingAndHungerRing) { + if (enableGluttonyRingAndHungerRing) { MinecraftForge.EVENT_BUS.register(new GluttonyRingEvent()); } } diff --git a/src/main/java/com/xir/NHUtilities/loader/ItemsLoader.java b/src/main/java/com/xir/NHUtilities/loader/ItemsLoader.java index 538803c..90f3ef5 100644 --- a/src/main/java/com/xir/NHUtilities/loader/ItemsLoader.java +++ b/src/main/java/com/xir/NHUtilities/loader/ItemsLoader.java @@ -1,19 +1,24 @@ package com.xir.NHUtilities.loader; +import static com.xir.NHUtilities.config.Config.enableGluttonyRingAndHungerRing; +import static com.xir.NHUtilities.config.Config.enableTimeVial; + import com.xir.NHUtilities.common.items.ModsItemsList; -import com.xir.NHUtilities.config.Config; import cpw.mods.fml.common.registry.GameRegistry; public class ItemsLoader { public static void registerNHUtilitiesItems() { - if (Config.enableGluttonyRingAndHungerRing) { + if (enableGluttonyRingAndHungerRing) { GameRegistry.registerItem(ModsItemsList.gluttonyRing, "GluttonyRing"); GameRegistry.registerItem(ModsItemsList.hungerRing, "HungerRing"); } - if (Config.enableTimeVial) { + if (enableTimeVial) { GameRegistry.registerItem(ModsItemsList.timeVial, "TimeVial"); } + if (enableTimeVial) { + GameRegistry.registerItem(ModsItemsList.eternityVial, "EternityVial"); + } } } diff --git a/src/main/java/com/xir/NHUtilities/loader/RecipeLoader.java b/src/main/java/com/xir/NHUtilities/loader/RecipeLoader.java index 8185839..0fac960 100644 --- a/src/main/java/com/xir/NHUtilities/loader/RecipeLoader.java +++ b/src/main/java/com/xir/NHUtilities/loader/RecipeLoader.java @@ -1,30 +1,91 @@ package com.xir.NHUtilities.loader; +import static com.xir.NHUtilities.config.Config.enableEternityVial; +import static com.xir.NHUtilities.config.Config.enableGluttonyRingAndHungerRing; +import static com.xir.NHUtilities.config.Config.enableTimeVial; + +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import com.xir.NHUtilities.common.items.ModsItemsList; -import com.xir.NHUtilities.config.Config; +import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.registry.GameRegistry; +import fox.spiteful.avaritia.items.LudicrousItems; +import singulariteam.eternalsingularity.item.EternalSingularityItem; public class RecipeLoader { public static void registerNHUtilitiesRecipes() { - if (Config.enableGluttonyRingAndHungerRing) { + if (enableGluttonyRingAndHungerRing) { GameRegistry.addShapedRecipe( new ItemStack(ModsItemsList.gluttonyRing), - new Object[] { "SIS", "IAI", "SIS", 'A', Items.apple, 'S', Items.string, 'I', Items.iron_ingot }); + "SIS", + "IAI", + "SIS", + 'A', + Items.apple, + 'S', + Items.string, + 'I', + Items.iron_ingot); GameRegistry .addShapelessRecipe(new ItemStack(ModsItemsList.hungerRing), new ItemStack(ModsItemsList.gluttonyRing)); GameRegistry .addShapelessRecipe(new ItemStack(ModsItemsList.gluttonyRing), new ItemStack(ModsItemsList.hungerRing)); } - if (Config.enableTimeVial) { + if (enableTimeVial) { + GameRegistry.addShapedRecipe( + new ItemStack(ModsItemsList.timeVial), + "GGG", + "DCD", + "QBQ", + 'B', + Items.glass_bottle, + 'G', + Items.gold_ingot, + 'C', + Items.clock, + 'D', + Items.diamond, + 'Q', + new ItemStack(Items.dye, 1, 4)); GameRegistry.addShapedRecipe( new ItemStack(ModsItemsList.timeVial), - new Object[] { "GGG", "DCD", "QBQ", 'B', Items.glass_bottle, 'G', Items.gold_ingot, 'C', Items.clock, - 'D', Items.diamond, 'Q', new ItemStack(Items.dye, 1, 4) }); + "CCC", + "CTC", + "CCC", + 'C', + Blocks.cobblestone, + 'T', + ModsItemsList.timeVial); } + if (enableEternityVial) { + if (!Loader.isModLoaded("gregtech") && Loader.isModLoaded("Avaritia")) { + GameRegistry.addShapedRecipe( + new ItemStack(ModsItemsList.eternityVial), + "ICI", + "CTC", + "ICI", + 'T', + ModsItemsList.timeVial, + 'C', + new ItemStack(LudicrousItems.resource, 1, 5), + 'I', + new ItemStack(LudicrousItems.resource, 1, 6)); + } else if (Loader.isModLoaded("gregtech")) { + GameRegistry.addShapedRecipe( + new ItemStack(ModsItemsList.eternityVial), + "SSS", + "STS", + "SSS", + 'T', + ModsItemsList.timeVial, + 'S', + EternalSingularityItem.instance); + } + } + } } diff --git a/src/main/java/com/xir/NHUtilities/main/ClientProxy.java b/src/main/java/com/xir/NHUtilities/main/ClientProxy.java index b37c5c3..b9f33d6 100644 --- a/src/main/java/com/xir/NHUtilities/main/ClientProxy.java +++ b/src/main/java/com/xir/NHUtilities/main/ClientProxy.java @@ -1,8 +1,9 @@ package com.xir.NHUtilities.main; +import static com.xir.NHUtilities.config.Config.enableEnhancedTeleporterMKII; + import com.xir.NHUtilities.client.key.KeyBindings; import com.xir.NHUtilities.client.key.KeyInputHandler; -import com.xir.NHUtilities.config.Config; import com.xir.NHUtilities.loader.RenderLoader; import cpw.mods.fml.common.FMLCommonHandler; @@ -13,7 +14,7 @@ public class ClientProxy extends CommonProxy { @Override public void init(FMLInitializationEvent event) { super.init(event); - if (Config.enableEnhancedTeleporterMKII) { + if (enableEnhancedTeleporterMKII) { FMLCommonHandler.instance() .bus() .register(new KeyInputHandler()); diff --git a/src/main/java/com/xir/NHUtilities/main/NHUtilities.java b/src/main/java/com/xir/NHUtilities/main/NHUtilities.java index 9ceacff..02a1d01 100644 --- a/src/main/java/com/xir/NHUtilities/main/NHUtilities.java +++ b/src/main/java/com/xir/NHUtilities/main/NHUtilities.java @@ -16,6 +16,7 @@ modid = NHUtilities.MODID, version = Tags.VERSION, name = NHUtilities.MOD_NAME, + dependencies = " after:gregtech;" + " after:Avaritia;" + " after:DraconicEvolution;" + " after:Baubles", acceptedMinecraftVersions = "[1.7.10]") public class NHUtilities { diff --git a/src/main/java/com/xir/NHUtilities/mixinPlugin/MixinsPackage.java b/src/main/java/com/xir/NHUtilities/mixinPlugin/MixinsPackage.java index bbb136a..3eb15b9 100644 --- a/src/main/java/com/xir/NHUtilities/mixinPlugin/MixinsPackage.java +++ b/src/main/java/com/xir/NHUtilities/mixinPlugin/MixinsPackage.java @@ -1,5 +1,8 @@ package com.xir.NHUtilities.mixinPlugin; +import static com.xir.NHUtilities.config.Config.enableAccelerateGregTechMachine; +import static com.xir.NHUtilities.config.Config.enableEnhancedTeleporterMKII; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -7,13 +10,11 @@ import org.jetbrains.annotations.NotNull; -import com.xir.NHUtilities.config.Config; - public enum MixinsPackage { - EnhanceTeleporterMKII(Config.enableEnhancedTeleporterMKII, "DraconicEvolution", Mixins.DE_TeleporterMKII_Mixin, + EnhanceTeleporterMKII(enableEnhancedTeleporterMKII, "DraconicEvolution", Mixins.DE_TeleporterMKII_Mixin, Mixins.DE_GUITeleporter_Mixin, Mixins.DE_TeleporterPacket_Mixin), - Enable_MTEAcclerator(Config.enableAccelerateGregTechMachine, "GregTech", Mixins.GT_MTEAcclerator_Mixin); + Enable_MTEAcclerator(enableAccelerateGregTechMachine, "GregTech", Mixins.GT_MTEAcclerator_Mixin); private final Boolean isEnabledModule; private final Set targetMods = new HashSet<>(); diff --git a/src/main/java/com/xir/NHUtilities/mixins/late/GregTech/BaseMetaTileEntity_Mixin.java b/src/main/java/com/xir/NHUtilities/mixins/late/GregTech/BaseMetaTileEntity_Mixin.java index df48f71..29548d0 100644 --- a/src/main/java/com/xir/NHUtilities/mixins/late/GregTech/BaseMetaTileEntity_Mixin.java +++ b/src/main/java/com/xir/NHUtilities/mixins/late/GregTech/BaseMetaTileEntity_Mixin.java @@ -1,5 +1,6 @@ package com.xir.NHUtilities.mixins.late.GregTech; +import static com.xir.NHUtilities.config.Config.accelerateGregTechMachineDiscount; import static com.xir.NHUtilities.config.Config.enableLogInfo; import static com.xir.NHUtilities.main.NHUtilities.LOG; @@ -33,7 +34,9 @@ public boolean tickAcceleration(int tickAcceleratedRate) { int maxProgress = this.getMaxProgress(); if (maxProgress >= 2) { // obviously - tickAcceleratedRate = (int) (tickAcceleratedRate * 0.8f); // discount for accelerating gregtech machines + tickAcceleratedRate = (int) (tickAcceleratedRate * accelerateGregTechMachineDiscount); // discount for + // accelerating + // gregtech machines int newProgress = currentProgress + tickAcceleratedRate; int NHUtilities$modify = Math.min(maxProgress, newProgress); if (enableLogInfo) LOG.info("modifyArg {}", NHUtilities$modify); diff --git a/src/main/java/com/xir/NHUtilities/utils/InformationHelper.java b/src/main/java/com/xir/NHUtilities/utils/InformationHelper.java new file mode 100644 index 0000000..86399d8 --- /dev/null +++ b/src/main/java/com/xir/NHUtilities/utils/InformationHelper.java @@ -0,0 +1,54 @@ +package com.xir.NHUtilities.utils; + +import java.util.List; + +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +import org.lwjgl.input.Keyboard; + +/** + * referenced draconic evolution + */ +@SuppressWarnings("unused") +public final class InformationHelper { + + public static final String dividingLine = "====================="; + + public static boolean isShiftKeyDown() { + return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + } + + public static boolean isCtrlKeyDown() { + return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + } + + public static boolean holdShiftForDetails(List list) { + if (!isShiftKeyDown()) { + list.add( + StatCollector.translateToLocal("infohelper.NHUtilities.txt_0") + " " + + EnumChatFormatting.ITALIC + + StatCollector.translateToLocal("infohelper.NHUtilities.key_shift") + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("infohelper.NHUtilities.txt_1")); + return false; + } + return true; + } + + public static boolean holdCtrlForDetails(List list) { + if (!isShiftKeyDown()) { + list.add( + StatCollector.translateToLocal("infohelper.NHUtilities.txt_0") + " " + + EnumChatFormatting.ITALIC + + StatCollector.translateToLocal("infohelper.NHUtilities.key_ctrl") + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("infohelper.NHUtilities.txt_1")); + return false; + } + return true; + } + +} diff --git a/src/main/java/com/xir/NHUtilities/utils/TooltipsChroma.java b/src/main/java/com/xir/NHUtilities/utils/TooltipsChroma.java new file mode 100644 index 0000000..ee4c14a --- /dev/null +++ b/src/main/java/com/xir/NHUtilities/utils/TooltipsChroma.java @@ -0,0 +1,44 @@ +package com.xir.NHUtilities.utils; + +import static net.minecraft.util.EnumChatFormatting.*; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.EnumChatFormatting; + +import org.jetbrains.annotations.NotNull; + +/** + * referenced Avaritia mod + */ +@SuppressWarnings("unused") +public final class TooltipsChroma { + + private static final EnumChatFormatting[] CHROMA_FORMATTINGS = new EnumChatFormatting[] { RED, GOLD, YELLOW, GREEN, + AQUA, BLUE, LIGHT_PURPLE }; + + public static @NotNull String applyChromaEffect(@NotNull String input) { + return formatWithChroma(input, CHROMA_FORMATTINGS, 80.0, 1, 1); + } + + public static @NotNull String formatWithChroma(@NotNull String input, EnumChatFormatting[] colors, double delay, + int step, int posStep) { + StringBuilder formattedText = new StringBuilder(input.length() * 3); + + if (delay <= 0) { + delay = 0.001; + } + + int offset = (int) Math.floor(Minecraft.getSystemTime() / delay) % colors.length; + + for (int i = 0; i < input.length(); i++) { + char character = input.charAt(i); + + int colorIndex = ((i * posStep) + colors.length - offset) % colors.length; + + formattedText.append(colors[colorIndex].toString()); + formattedText.append(character); + } + + return formattedText.toString(); + } +} diff --git a/src/main/resources/assets/NHUtilities/lang/en_US.lang b/src/main/resources/assets/NHUtilities/lang/en_US.lang index 0c0a6d3..c04beb3 100644 --- a/src/main/resources/assets/NHUtilities/lang/en_US.lang +++ b/src/main/resources/assets/NHUtilities/lang/en_US.lang @@ -4,4 +4,31 @@ info.teleporterInfBaublesButton.txt=Support the use of-button-to open the bauble item.NHUtilities:GluttonyRing.name=GluttonyRing item.NHUtilities:HungerRing.name=HungerRing item.NHUtilities:TimeVial.name=TimeVial +item.NHUtilities:EternityVial.name=EternityVial + +# tooltips for time vial text.NHUtilities.TimeVial.tips=§ftime: §6%d hours §d%d minutes §a%d seconds +text.NHUtilities.TimeVial.details_0=Possesses 6 acceleration gradients. +text.NHUtilities.TimeVial.details_1=Default adjustable range [4->128]. +text.NHUtilities.TimeVial.details_2=Can be modified in the configuration to [8->256]. +text.NHUtilities.TimeVial.details_3=Checks every 30 seconds if the player has multiple time vials. +text.NHUtilities.TimeVial.details_4=When multiples are present, executes time accumulation, adding the most time to one vial. +text.NHUtilities.TimeVial.details_5=While setting the remaining time vials to: +text.NHUtilities.TimeVial.details_6=Uh...114514. -11 hours -45 minutes -14 seconds. +text.NHUtilities.TimeVial.details_7=Can be modified without limits in the config file. +text.NHUtilities.TimeVial.details_8=The rules for GT machine acceleration are as follows: +text.NHUtilities.TimeVial.details_9=Machines require processing time time and time must be >= 2 ticks. +text.NHUtilities.TimeVial.details_10=Executes time + acceleration multiplier * discount (default 0.8f), which is adjustable. +text.NHUtilities.TimeVial.details_11=In simple terms, adds the corresponding time to the machine's working time. +text.NHUtilities.TimeVial.details_12=Configuration file notes +text.NHUtilities.TimeVial.details_13=Allows adjusting the volume of the vial sounds and whether to enable number textures, i.e., 8x or 16x patterns. +text.NHUtilities.TimeVial.details_14=If unsure, do not modify. enableLogInfo = true + +# tooltips for time vial +text.NHUtilities.EternityVial.details_0=Eternity + +# information helper +infohelper.NHUtilities.txt_0=§6====§f[§dHold +infohelper.NHUtilities.txt_1=§dfor Details§f]§6==== +infohelper.NHUtilities.key_ctrl=§bCtrl +infohelper.NHUtilities.key_shift=§bShift diff --git a/src/main/resources/assets/NHUtilities/lang/zh_CN.lang b/src/main/resources/assets/NHUtilities/lang/zh_CN.lang index 7aa651b..54a37f2 100644 --- a/src/main/resources/assets/NHUtilities/lang/zh_CN.lang +++ b/src/main/resources/assets/NHUtilities/lang/zh_CN.lang @@ -4,4 +4,31 @@ info.teleporterInfBaublesButton.txt=支持使用-按键-打开饰品 item.NHUtilities:GluttonyRing.name=暴食指环 item.NHUtilities:HungerRing.name=饥饿指环 item.NHUtilities:TimeVial.name=时间之瓶 +item.NHUtilities:EternityVial.name=永恒之瓶 + +# tooltips for time vial text.NHUtilities.TimeVial.tips=§f时间: §6%d 小时 §d%d 分钟 §a%d 秒 +text.NHUtilities.TimeVial.details_0=拥有 6 个加速梯度 +text.NHUtilities.TimeVial.details_1=默认可调整范围[4->128] +text.NHUtilities.TimeVial.details_2=可在配置修改为[8->256] +text.NHUtilities.TimeVial.details_3=间隔 30 秒检测一次玩家是否有多个时间瓶 +text.NHUtilities.TimeVial.details_4=当有多个时执行 时间累加 添加最多时间的瓶子 +text.NHUtilities.TimeVial.details_5=同时把其余时间瓶时间修改为: +text.NHUtilities.TimeVial.details_6=额..114514. -11 小时 -45 分钟 -14秒 +text.NHUtilities.TimeVial.details_7=可在配置文件修改无限制 +text.NHUtilities.TimeVial.details_8=GT机器加速的规则如下: +text.NHUtilities.TimeVial.details_9=机器需要加工时间time且 time >= 2tick +text.NHUtilities.TimeVial.details_10=执行time + 加速倍率 * 折扣(默认0.8f) 可调整 +text.NHUtilities.TimeVial.details_11=简单说就是给机器工作时间 加上相应的时间 +text.NHUtilities.TimeVial.details_12=配置文件说明 +text.NHUtilities.TimeVial.details_13=允许调整瓶子声音大小,是否启用数字贴图 即 8x 16x的图案 +text.NHUtilities.TimeVial.details_14=如果不清楚请不要修改 enableLogInfo = true + +# tooltips for time vial +text.NHUtilities.EternityVial.details_0=Eternity + +# information helper +infohelper.NHUtilities.txt_0=§6====§f[§d按下 +infohelper.NHUtilities.txt_1=§d显示更多信息§f]§6==== +infohelper.NHUtilities.key_ctrl=§bCtrl +infohelper.NHUtilities.key_shift=§bShift diff --git a/src/main/resources/assets/NHUtilities/shader/cosmic.frag b/src/main/resources/assets/NHUtilities/shader/cosmic.frag new file mode 100644 index 0000000..5e91f4f --- /dev/null +++ b/src/main/resources/assets/NHUtilities/shader/cosmic.frag @@ -0,0 +1,182 @@ +#version 120 + +#define M_PI 3.1415926535897932384626433832795 + +const int cosmiccount = 10; +const int cosmicoutof = 101; + +uniform sampler2D texture0; +uniform vec3 lightlevel; + +uniform float time2; + +uniform float yaw; +uniform float pitch; +uniform float externalScale; + +uniform float lightmix; +uniform float opacity; + +uniform mat2 cosmicuvs[cosmiccount]; + +varying vec3 position; + +float rand2d(vec2 x) { + return fract(sin(mod(dot(x, vec2(12.9898, 78.233)), 3.14)) * 43758.5453); +} + +mat4 rotationMatrix(vec3 axis, float angle) +{ + + axis = normalize(axis); + float s = sin(angle); + float c = cos(angle); + float oc = 1.0 - c; + + return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, + oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, + oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, + 0.0, 0.0, 0.0, 1.0); +} + +void main (void) +{ + vec4 light = gl_Color; + vec4 mask = texture2D(texture0, gl_TexCoord[0].xy); + light.rgb *= lightlevel; + float correctTime = mod(time2,12000); + + float oneOverExternalScale = 1.0/externalScale; + + int uvtiles = 16; + + // background colour + vec4 col = vec4(0.1,0.0,0.0,1.0); + + float pulse = mod(correctTime,400)/400.0; + + col.g = sin(pulse*M_PI*2) * 0.075 + 0.225; + col.b = cos(pulse*M_PI*2) * 0.05 + 0.3; + + // get ray from camera to fragment + vec4 dir = normalize(vec4( -position, 0)); + + // rotate the ray to show the right bit of the sphere for the angle + float sb = sin(pitch); + float cb = cos(pitch); + dir = normalize(vec4(dir.x, dir.y * cb - dir.z * sb, dir.y * sb + dir.z * cb, 0)); + + float sa = sin(-yaw); + float ca = cos(-yaw); + dir = normalize(vec4(dir.z * sa + dir.x * ca, dir.y, dir.z * ca - dir.x * sa, 0)); + + vec4 ray; + + // draw the layers + for (int i=0; i<16; i++) { + int mult = 16-i; + + // get semi-random stuff + int j = i + 7; + float rand1 = (j * j * 4321 + j * 8) * 2.0; + int k = j + 1; + float rand2 = (k * k * k * 239 + k * 37) * 3.6; + float rand3 = rand1 * 347.4 + rand2 * 63.4; + + // random rotation matrix by random rotation around random axis + vec3 axis = normalize(vec3(sin(rand1), sin(rand2) , cos(rand3))); + + // apply + ray = dir * rotationMatrix(axis, mod(rand3, 2*M_PI)); + + // calcuate the UVs from the final ray + float rawu = 0.5 + (atan(ray.z,ray.x)/(2*M_PI)); + float rawv = 0.5 + (asin(ray.y)/M_PI); + + // get UV scaled for layers and offset by time; + float scale = mult*0.5 + 2.75; + float u = rawu * scale * externalScale; + //float v = (rawv + time * 0.00006) * scale * 0.6; + float v = (rawv + correctTime * 0.0002 * oneOverExternalScale) * scale * 0.6 * externalScale; + + vec2 tex = vec2( u, v ); + + // tile position of the current uv + int tu = int(mod(floor(u*uvtiles),uvtiles)); + int tv = int(mod(floor(v*uvtiles),uvtiles)); + + // get pseudorandom variants + int symbol = int(rand2d(vec2(tu, tv + i * 10.0)) * cosmicoutof); + int rotation = int(mod(pow(tu,float(tv)) + tu + 3 + tv*i, 8)); + bool flip = false; + if (rotation >= 4) { + rotation -= 4; + flip = true; + } + + // if it's an icon, then add the colour! + if (symbol >= 0 && symbol < cosmiccount) { + + vec2 cosmictex = vec2(1.0,1.0); + vec4 tcol = vec4(1.0,0.0,0.0,1.0); + + // get uv within the tile + float ru = clamp(mod(u,1.0)*uvtiles - tu, 0.0, 1.0); + float rv = clamp(mod(v,1.0)*uvtiles - tv, 0.0, 1.0); + + if (flip) { + ru = 1.0 - ru; + } + + float oru = ru; + float orv = rv; + + // rotate uvs if necessary + if (rotation == 1) { + oru = 1.0-rv; + orv = ru; + } else if (rotation == 2) { + oru = 1.0-ru; + orv = 1.0-rv; + } else if (rotation == 3) { + oru = rv; + orv = 1.0-ru; + } + + // get the iicon uvs for the tile + float umin = cosmicuvs[symbol][0][0]; + float umax = cosmicuvs[symbol][1][0]; + float vmin = cosmicuvs[symbol][0][1]; + float vmax = cosmicuvs[symbol][1][1]; + + // interpolate based on tile uvs + cosmictex.x = umin * (1.0-oru) + umax * oru; + cosmictex.y = vmin * (1.0-orv) + vmax * orv; + + tcol = texture2D(texture0, cosmictex); + + // set the alpha, blending out at the bunched ends + float a = tcol.r * (0.5 + (1.0/mult) * 1.0) * (1.0-smoothstep(0.15, 0.48, abs(rawv-0.5))); + + // get fancy colours + float r = (mod(rand1, 29.0)/29.0) * 0.3 + 0.4; + float g = (mod(rand2, 35.0)/35.0) * 0.4 + 0.6; + float b = (mod(rand1, 17.0)/17.0) * 0.3 + 0.7; + + // mix the colours + //col = col*(1-a) + vec4(r,g,b,1)*a; + col = col + vec4(r,g,b,1)*a; + } + } + + // apply lighting + vec3 shade = light.rgb * (lightmix) + vec3(1.0-lightmix,1.0-lightmix,1.0-lightmix); + col.rgb *= shade; + + // apply mask + col.a *= mask.a * opacity; + + col = clamp(col,0.0,1.0); + + gl_FragColor = col; +} diff --git a/src/main/resources/assets/NHUtilities/shader/cosmic.vert b/src/main/resources/assets/NHUtilities/shader/cosmic.vert new file mode 100644 index 0000000..9b319d5 --- /dev/null +++ b/src/main/resources/assets/NHUtilities/shader/cosmic.vert @@ -0,0 +1,224 @@ +#version 120 + +vec4 Ambient; +vec4 Diffuse; +vec4 Specular; + +attribute float activelights; + +varying vec3 position; + +void pointLight(in int i, in vec3 normal, in vec3 eye, in vec3 ecPosition3) +{ + float nDotVP; // normal . light direction + float nDotHV; // normal . light half vector + float pf; // power factor + float attenuation; // computed attenuation factor + float d; // distance from surface to light source + vec3 VP; // direction from surface to light position + vec3 halfVector; // direction of maximum highlights + + // Compute vector from surface to light position + VP = vec3 (gl_LightSource[i].position) - ecPosition3; + + // Compute distance between surface and light position + d = length(VP); + + // Normalize the vector from surface to light position + VP = normalize(VP); + + // Compute attenuation + attenuation = 1.0 / (gl_LightSource[i].constantAttenuation + + gl_LightSource[i].linearAttenuation * d + + gl_LightSource[i].quadraticAttenuation * d * d); + + halfVector = normalize(VP + eye); + + nDotVP = max(0.0, dot(normal, VP)); + //nDotHV = max(0.0, dot(normal, halfVector)); + + //if (nDotVP == 0.0) + //{ + pf = 0.0; + //} + //else + //{ + // pf = pow(nDotHV, gl_FrontMaterial.shininess); + //} + Ambient += gl_LightSource[i].ambient * attenuation; + Diffuse += gl_LightSource[i].diffuse * nDotVP * attenuation; + //Specular += gl_LightSource[i].specular * pf * attenuation; +} + +void spotLight(in int i, in vec3 normal, in vec3 eye, in vec3 ecPosition3) +{ + float nDotVP; // normal . light direction + float nDotHV; // normal . light half vector + float pf; // power factor + float spotDot; // cosine of angle between spotlight + float spotAttenuation; // spotlight attenuation factor + float attenuation; // computed attenuation factor + float d; // distance from surface to light source + vec3 VP; // direction from surface to light position + vec3 halfVector; // direction of maximum highlights + + // Compute vector from surface to light position + VP = vec3 (gl_LightSource[i].position) - ecPosition3; + + // Compute distance between surface and light position + d = length(VP); + + // Normalize the vector from surface to light position + VP = normalize(VP); + + // Compute attenuation + attenuation = 1.0 / (gl_LightSource[i].constantAttenuation + + gl_LightSource[i].linearAttenuation * d + + gl_LightSource[i].quadraticAttenuation * d * d); + + // See if point on surface is inside cone of illumination + spotDot = dot(-VP, normalize(gl_LightSource[i].spotDirection)); + + if (spotDot < gl_LightSource[i].spotCosCutoff) + { + spotAttenuation = 0.0; // light adds no contribution + } + else + { + spotAttenuation = pow(spotDot, gl_LightSource[i].spotExponent); + + } + // Combine the spotlight and distance attenuation. + attenuation *= spotAttenuation; + + halfVector = normalize(VP + eye); + + nDotVP = max(0.0, dot(normal, VP)); + //nDotHV = max(0.0, dot(normal, halfVector)); + + //if (nDotVP == 0.0) + //{ + pf = 0.0; + //} + //else + //{ +// pf = pow(nDotHV, gl_FrontMaterial.shininess); +// + // } + Ambient += gl_LightSource[i].ambient * attenuation; + Diffuse += gl_LightSource[i].diffuse * nDotVP * attenuation; + //Specular += gl_LightSource[i].specular * pf * attenuation; + +} + +void directionalLight(in int i, in vec3 normal) +{ + float nDotVP; // normal . light direction + float nDotHV; // normal . light half vector + float pf; // power factor + + nDotVP = max(0.0, dot(normal, normalize(vec3 (gl_LightSource[i].position)))); + //nDotHV = max(0.0, dot(normal, vec3 (gl_LightSource[i].halfVector))); + + //if (nDotVP == 0.0) + //{ + pf = 0.0; + //} + //else + //{ +// pf = pow(nDotHV, gl_FrontMaterial.shininess); + //} + Ambient += gl_LightSource[i].ambient; + Diffuse += gl_LightSource[i].diffuse * nDotVP; + //Specular += gl_LightSource[i].specular * pf; +} + +vec3 fnormal(void) +{ + //Compute the normal + vec3 normal = gl_NormalMatrix * gl_Normal; + normal = normalize(normal); + return normal; +} + +void ProcessLight(in int i, in vec3 normal, in vec3 eye, in vec3 ecPosition3) +{ + if (gl_LightSource[i].spotCutoff==180.0) + { + if (gl_LightSource[i].position.w==0.0) + { + directionalLight(i, normal); + } + else + { + pointLight(i, normal, eye, ecPosition3); + } + } + else + { + spotLight(i,normal,eye,ecPosition3); + } +} + +void flight(in vec3 normal, in vec4 ecPosition, float alphaFade) +{ + vec4 color; + vec3 ecPosition3; + vec3 eye; + int i; + + ecPosition3 = (vec3 (ecPosition)) / ecPosition.w; + eye = vec3 (0.0, 0.0, 1.0); + + // Clear the light intensity accumulators + Ambient = vec4 (0.0); + Diffuse = vec4 (0.0); + Specular = vec4 (0.0); + + if (activelights>0) + { + ProcessLight(0,normal,eye,ecPosition3); + } + if (activelights>1) + { + ProcessLight(1,normal,eye,ecPosition3); + } + //if (activelights>2) + //{ + // ProcessLight(2,normal,eye,ecPosition3); + //} + //if (activelights>3) + //{ + // ProcessLight(3,normal,eye,ecPosition3); + //} + + color = gl_FrontLightModelProduct.sceneColor + + Ambient * gl_FrontMaterial.ambient + + Diffuse * gl_FrontMaterial.diffuse; + color += Specular * gl_FrontMaterial.specular; + color = clamp( color, 0.0, 1.0 ); + gl_FrontColor = color; + gl_FrontColor.a *= alphaFade; +} + +void main (void) +{ + vec3 transformedNormal; + float alphaFade = 1.0; + + // Eye-coordinate position of vertex, needed in various calculations + vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex; + + // Do fixed functionality vertex transform + gl_Position = ftransform(); + transformedNormal = fnormal(); + flight(transformedNormal, ecPosition, alphaFade); + + //Enable texture coordinates + gl_TexCoord[0] = gl_MultiTexCoord0; + //gl_TexCoord[1] = gl_MultiTexCoord1; + //gl_TexCoord[2] = gl_MultiTexCoord2; + //gl_TexCoord[3] = gl_MultiTexCoord3; + + position = (gl_ModelViewMatrix * gl_Vertex).xyz; +} \ No newline at end of file diff --git a/src/main/resources/assets/NHUtilities/textures/items/EternityVial.png b/src/main/resources/assets/NHUtilities/textures/items/EternityVial.png new file mode 100644 index 0000000..1e3a94a Binary files /dev/null and b/src/main/resources/assets/NHUtilities/textures/items/EternityVial.png differ diff --git a/src/main/resources/assets/NHUtilities/textures/items/EternityVial.png.mcmeta b/src/main/resources/assets/NHUtilities/textures/items/EternityVial.png.mcmeta new file mode 100644 index 0000000..76bf944 --- /dev/null +++ b/src/main/resources/assets/NHUtilities/textures/items/EternityVial.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 5, + "interpolate": true + } +} diff --git a/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask -back.png b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask -back.png new file mode 100644 index 0000000..3eebf2c Binary files /dev/null and b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask -back.png differ diff --git a/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask.png b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask.png new file mode 100644 index 0000000..e22d172 Binary files /dev/null and b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask.png differ diff --git a/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask.png.mcmeta b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask.png.mcmeta new file mode 100644 index 0000000..76bf944 --- /dev/null +++ b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 5, + "interpolate": true + } +} diff --git a/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask2.png b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask2.png new file mode 100644 index 0000000..e4ab36b Binary files /dev/null and b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask2.png differ diff --git a/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask3.png b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask3.png new file mode 100644 index 0000000..b239e35 Binary files /dev/null and b/src/main/resources/assets/NHUtilities/textures/items/EternityVial_mask3.png differ diff --git a/src/main/resources/assets/NHUtilities/textures/items/icon_GTNH.png b/src/main/resources/assets/NHUtilities/textures/items/icon_GTNH.png new file mode 100644 index 0000000..0b86f3c Binary files /dev/null and b/src/main/resources/assets/NHUtilities/textures/items/icon_GTNH.png differ