diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index e8617eeab..4602f8693 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -217,7 +217,7 @@ public class WeaponRecipes { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.ammo_dart_nerf, 16), new Object[] { "I", "I", 'I', ModItems.plate_polymer })); //Ammo types - GameRegistry.addRecipe(new ItemStack(ModItems.ammo_12gauge_incendiary, 8), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_12gauge, 'A', ModItems.powder_fire }); + /*GameRegistry.addRecipe(new ItemStack(ModItems.ammo_12gauge_incendiary, 8), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_12gauge, 'A', ModItems.powder_fire }); GameRegistry.addRecipe(new ItemStack(ModItems.ammo_12gauge_shrapnel, 8), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_12gauge, 'A', ModBlocks.gravel_obsidian }); GameRegistry.addRecipe(new ItemStack(ModItems.ammo_12gauge_du, 8), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_12gauge, 'A', ModItems.ingot_u238 }); GameRegistry.addRecipe(new ItemStack(ModItems.ammo_12gauge_sleek, 64), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_12gauge, 'A', ModItems.coin_maskman }); @@ -226,7 +226,7 @@ public class WeaponRecipes { GameRegistry.addRecipe(new ItemStack(ModItems.ammo_20gauge_caustic, 8), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_20gauge, 'A', ModItems.powder_poison }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.ammo_20gauge_shock, 8), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_20gauge, 'A', "dustDiamond" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.ammo_20gauge_wither, 4), new Object[] { "BCB", "CAC", "BCB", 'B', ModItems.ammo_20gauge, 'A', Blocks.soul_sand, 'C', "dustCoal" })); - GameRegistry.addRecipe(new ItemStack(ModItems.ammo_20gauge_sleek, 64), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_20gauge, 'A', ModItems.coin_maskman }); + GameRegistry.addRecipe(new ItemStack(ModItems.ammo_20gauge_sleek, 64), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_20gauge, 'A', ModItems.coin_maskman });*/ GameRegistry.addRecipe(new ItemStack(ModItems.ammo_4gauge_flechette_phosphorus, 8), new Object[] { "BBB", "BAB", "BBB", 'B', ModItems.ammo_4gauge_flechette, 'A', ModItems.ingot_phosphorus }); GameRegistry.addRecipe(new ItemStack(ModItems.ammo_4gauge_balefire, 4), new Object[] { " B ", "BAB", " B ", 'B', ModItems.ammo_4gauge_explosive, 'A', ModItems.egg_balefire_shard }); GameRegistry.addRecipe(new ItemStack(ModItems.ammo_4gauge_kampf, 2), new Object[] { "G", "R", 'G', ModItems.ammo_rocket, 'R', ModItems.ammo_4gauge_explosive }); diff --git a/src/main/java/com/hbm/extprop/HbmPlayerProps.java b/src/main/java/com/hbm/extprop/HbmPlayerProps.java index 55d31dcd8..6a19ebb22 100644 --- a/src/main/java/com/hbm/extprop/HbmPlayerProps.java +++ b/src/main/java/com/hbm/extprop/HbmPlayerProps.java @@ -38,7 +38,22 @@ public class HbmPlayerProps implements IExtendedEntityProperties { return keysPressed[key.ordinal()]; } + public boolean isJetpackActive() { + return this.enableBackpack && getKeyPressed(EnumKeybind.JETPACK); + } + public void setKeyPressed(EnumKeybind key, boolean pressed) { + + if(!getKeyPressed(key) && pressed) { + + if(key == EnumKeybind.TOGGLE_JETPACK) { + this.enableBackpack = !this.enableBackpack; + } + if(key == EnumKeybind.TOGGLE_HEAD) { + this.enableHUD = !this.enableHUD; + } + } + keysPressed[key.ordinal()] = pressed; } diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 717421c4b..3dde39e3b 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -1,9 +1,51 @@ package com.hbm.handler; +import org.lwjgl.input.Keyboard; + +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.main.MainRegistry; +import com.hbm.packet.KeybindPacket; +import com.hbm.packet.PacketDispatcher; + +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent; +import net.minecraft.client.settings.KeyBinding; + public class HbmKeybinds { + public static final String category = "hbm.key"; + + public static KeyBinding jetpackKey = new KeyBinding(category + ".toggleBack", Keyboard.KEY_C, category); + public static KeyBinding hudKey = new KeyBinding(category + ".toggleHUD", Keyboard.KEY_V, category); + public static KeyBinding reloadKey = new KeyBinding(category + ".reload", Keyboard.KEY_R, category); + + public static void register() { + ClientRegistry.registerKeyBinding(jetpackKey); + ClientRegistry.registerKeyBinding(hudKey); + ClientRegistry.registerKeyBinding(reloadKey); + } + + @SubscribeEvent + public void keyEvent(KeyInputEvent event) { + + HbmPlayerProps props = HbmPlayerProps.getData(MainRegistry.proxy.me()); + + for(EnumKeybind key : EnumKeybind.values()) { + boolean last = props.getKeyPressed(key); + boolean current = MainRegistry.proxy.getIsKeyPressed(key); + + if(last != current) { + PacketDispatcher.wrapper.sendToServer(new KeybindPacket(key, current)); + props.setKeyPressed(key, current); + } + } + } + public static enum EnumKeybind { JETPACK, - TOGGLE_HEAD + TOGGLE_JETPACK, + TOGGLE_HEAD, + RELOAD } } diff --git a/src/main/java/com/hbm/inventory/AnvilRecipes.java b/src/main/java/com/hbm/inventory/AnvilRecipes.java index 8814598ec..ec9b6174a 100644 --- a/src/main/java/com/hbm/inventory/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/AnvilRecipes.java @@ -10,7 +10,9 @@ import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.items.ModItems; import net.minecraft.block.Block; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; public class AnvilRecipes { @@ -23,10 +25,22 @@ public class AnvilRecipes { registerConstruction(); } + /* + * ////// // // // ////// // // // // // ////// + * // //// //// // // // // // //// // // + * ////// // // // // // ////// // // //// // // + * // // // // // // // // // // // // + * ////// // // // // // // // // // ////// + */ public static void registerSmithing() { - smithingRecipes.add(new AnvilSmithingRecipe(2, new ItemStack(ModItems.plate_steel, 2), new OreDictStack("ingotSteel"), new OreDictStack("ingotSteel"))); - + for(int i = 0; i < 9; i++) + smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.ingot_steel_dusted, 1, i + 1), + new ComparableStack(ModItems.ingot_steel_dusted, 1, i), new ComparableStack(ModItems.ingot_steel_dusted, 1, i))); + + smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.ingot_chainsteel, 1), + new ComparableStack(ModItems.ingot_steel_dusted, 1, 9), new ComparableStack(ModItems.ingot_steel_dusted, 1, 9))); + Block[] anvils = new Block[]{ModBlocks.anvil_iron, ModBlocks.anvil_lead}; for(Block anvil : anvils) { @@ -39,30 +53,105 @@ public class AnvilRecipes { smithingRecipes.add(new AnvilSmithingRecipe(1, new ItemStack(ModBlocks.anvil_steel, 1), new ComparableStack(anvil), new OreDictStack("ingotSteel", 10))); } + smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.ingot_meteorite_forged, 1), new ComparableStack(ModItems.ingot_meteorite), new ComparableStack(ModItems.ingot_meteorite))); + smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.blade_meteorite, 1), new ComparableStack(ModItems.ingot_meteorite_forged), new ComparableStack(ModItems.ingot_meteorite_forged))); + smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.meteorite_sword_reforged, 1), new ComparableStack(ModItems.meteorite_sword_seared), new ComparableStack(ModItems.ingot_meteorite_forged))); smithingRecipes.add(new AnvilSmithingRecipe(1, new ItemStack(ModItems.gun_ar15, 1), new ComparableStack(ModItems.gun_thompson), new ComparableStack(ModItems.pipe_lead))); + smithingRecipes.add(new AnvilSmithingRecipe(1916169, new ItemStack(ModItems.wings_murk, 1), new ComparableStack(ModItems.wings_limp), new ComparableStack(ModItems.particle_tachyon))); } + /* + * ////// ////// // // ////// ////// //// // // ////// ////// // ////// // // + * // // // //// // // // // // // // // // // // // //// // + * // // // // //// ////// // //// // // // // // // // // //// + * // // // // // // // // // // // // // // // // // // + * ////// ////// // // ////// // // // ////// ////// // // ////// // // + */ public static void registerConstruction() { + registerConstructionRecipes(); + registerConstructionAmmo(); + registerConstructionRecycling(); + + constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack("ingotIron"), new AnvilOutput(new ItemStack(ModItems.plate_iron))).setTier(3)); + constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack("ingotGold"), new AnvilOutput(new ItemStack(ModItems.plate_gold))).setTier(3)); + constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack("ingotCopper"), new AnvilOutput(new ItemStack(ModItems.plate_copper))).setTier(3)); + constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack("ingotLead"), new AnvilOutput(new ItemStack(ModItems.plate_lead))).setTier(3)); + constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack("ingotSteel"), new AnvilOutput(new ItemStack(ModItems.plate_steel))).setTier(3)); + } + + public static void registerConstructionRecipes() { constructionRecipes.add(new AnvilConstructionRecipe( - new OreDictStack("ingotIron"), - new AnvilOutput(new ItemStack(ModItems.plate_iron)) - ).setTier(1)); + new AStack[] { + new OreDictStack("plateCopper", 4) + }, + new AnvilOutput(new ItemStack(ModItems.board_copper))).setTier(1)); + constructionRecipes.add(new AnvilConstructionRecipe( - new OreDictStack("ingotGold"), - new AnvilOutput(new ItemStack(ModItems.plate_gold)) - ).setTier(1)); + new AStack[] { + new OreDictStack("plateIron", 2), + new ComparableStack(ModItems.coil_copper), + new ComparableStack(ModItems.coil_copper_torus) + }, + new AnvilOutput(new ItemStack(ModItems.motor, 2))).setTier(1)); + constructionRecipes.add(new AnvilConstructionRecipe( - new OreDictStack("ingotCopper"), - new AnvilOutput(new ItemStack(ModItems.plate_copper)) - ).setTier(1)); + new AStack[] { + new ComparableStack(Blocks.stonebrick, 4), + new OreDictStack("ingotIron", 2), + new OreDictStack("ingotTungsten", 4), + new ComparableStack(ModItems.board_copper, 2) + }, + new AnvilOutput(new ItemStack(ModBlocks.machine_difurnace_off))).setTier(1)); + constructionRecipes.add(new AnvilConstructionRecipe( - new OreDictStack("ingotLead"), - new AnvilOutput(new ItemStack(ModItems.plate_lead)) - ).setTier(1)); + new AStack[] { + new OreDictStack("blockGlassColorless", 4), + new OreDictStack("ingotSteel", 8), + new OreDictStack("ingotCopper", 8), + new ComparableStack(ModItems.motor, 2), + new ComparableStack(ModItems.circuit_aluminium, 1) + }, + new AnvilOutput(new ItemStack(ModBlocks.machine_assembler))).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( - new OreDictStack("ingotSteel"), - new AnvilOutput(new ItemStack(ModItems.plate_steel)) - ).setTier(1)); + new AStack[] { + new ComparableStack(Items.bone, 16), + new ComparableStack(Items.leather, 4), + new ComparableStack(Items.feather, 24) + }, + new AnvilOutput(new ItemStack(ModItems.wings_limp))).setTier(2)); + } + + public static void registerConstructionAmmo() { + + Object[][] recs = new Object[][] { + new Object[] {ModItems.ammo_12gauge, ModItems.powder_fire, ModItems.ammo_12gauge_incendiary, 20, 2}, + new Object[] {ModItems.ammo_12gauge, Item.getItemFromBlock(ModBlocks.gravel_obsidian), ModItems.ammo_12gauge_shrapnel, 20, 2}, + new Object[] {ModItems.ammo_12gauge, ModItems.ingot_u238, ModItems.ammo_12gauge_du, 20, 3}, + new Object[] {ModItems.ammo_12gauge, ModItems.coin_maskman, ModItems.ammo_12gauge_sleek, 100, 4}, + + new Object[] {ModItems.ammo_20gauge, ModItems.powder_fire, ModItems.ammo_20gauge_incendiary, 20, 2}, + new Object[] {ModItems.ammo_20gauge, Item.getItemFromBlock(ModBlocks.gravel_obsidian), ModItems.ammo_20gauge_shrapnel, 20, 2}, + new Object[] {ModItems.ammo_20gauge, ModItems.powder_poison, ModItems.ammo_20gauge_caustic, 20, 2}, + new Object[] {ModItems.ammo_20gauge, "dustDiamond", ModItems.ammo_20gauge_shock, 20, 2}, + new Object[] {ModItems.ammo_20gauge, Item.getItemFromBlock(Blocks.soul_sand), ModItems.ammo_20gauge_wither, 10, 3}, + new Object[] {ModItems.ammo_20gauge, ModItems.coin_maskman, ModItems.ammo_20gauge_sleek, 100, 4}, + }; + + for(Object[] objs : recs) { + + if(objs[1] instanceof Item) { + constructionRecipes.add(new AnvilConstructionRecipe(new AStack[] { new ComparableStack((Item)objs[0], (int)objs[3]), new ComparableStack((Item)objs[1], 1) }, + new AnvilOutput(new ItemStack((Item)objs[2], (int)objs[3]))).setTier((int)objs[4])); + + } else if(objs[1] instanceof String) { + constructionRecipes.add(new AnvilConstructionRecipe(new AStack[] { new ComparableStack((Item)objs[0], (int)objs[3]), new OreDictStack((String)objs[1], 1) }, + new AnvilOutput(new ItemStack((Item)objs[2], (int)objs[3]))).setTier((int)objs[4])); + } + } + } + + public static void registerConstructionRecycling() { constructionRecipes.add(new AnvilConstructionRecipe( new ComparableStack(ModBlocks.barrel_tcalloy), new AnvilOutput[] { @@ -72,17 +161,6 @@ public class AnvilRecipes { new AnvilOutput(new ItemStack(ModItems.ingot_tcalloy, 1), 0.25F) } ).setTier(3)); - - for(int i = 0; i < 8; i++) - constructionRecipes.add(new AnvilConstructionRecipe( - new OreDictStack("plateCopper"), - new AnvilOutput(new ItemStack(ModItems.wire_copper, 8)) - ).setTier(1)); - - constructionRecipes.add(new AnvilConstructionRecipe( - new OreDictStack("plateGold"), - new AnvilOutput(new ItemStack(ModItems.wire_gold, 8)) - ).setTierRange(1, 4)); } public static List getSmithing() { @@ -93,61 +171,6 @@ public class AnvilRecipes { return constructionRecipes; } - public static class AnvilSmithingRecipe { - - int tier; - ItemStack output; - AStack left; - AStack right; - boolean shapeless = false; - - public AnvilSmithingRecipe(int tier, ItemStack out, AStack left, AStack right) { - this.tier = tier; - this.output = out; - this.left = left; - this.right = right; - } - - public AnvilSmithingRecipe makeShapeless() { - this.shapeless = true; - return this; - } - - public boolean matches(ItemStack left, ItemStack right) { - return matchesInt(left, right) != -1; - } - - public int matchesInt(ItemStack left, ItemStack right) { - - if(doesStackMatch(left, this.left) && doesStackMatch(right, this.right)) - return 0; - - if(shapeless) { - return doesStackMatch(right, this.left) && doesStackMatch(left, this.right) ? 1 : -1; - } - - return -1; - } - - public boolean doesStackMatch(ItemStack input, AStack recipe) { - return recipe.matchesRecipe(input); - } - - public ItemStack getOutput(ItemStack left, ItemStack right) { - return output.copy(); - } - - public int amountConsumed(int index, boolean mirrored) { - - if(index == 0) - return mirrored ? right.stacksize : left.stacksize; - if(index == 1) - return mirrored ? left.stacksize : right.stacksize; - - return 0; - } - } - public static class AnvilConstructionRecipe { public List input = new ArrayList(); public List output = new ArrayList(); diff --git a/src/main/java/com/hbm/inventory/AnvilSmithingHotRecipe.java b/src/main/java/com/hbm/inventory/AnvilSmithingHotRecipe.java new file mode 100644 index 000000000..c48455d27 --- /dev/null +++ b/src/main/java/com/hbm/inventory/AnvilSmithingHotRecipe.java @@ -0,0 +1,41 @@ +package com.hbm.inventory; + +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.items.special.ItemHot; + +import net.minecraft.item.ItemStack; + +public class AnvilSmithingHotRecipe extends AnvilSmithingRecipe { + + public AnvilSmithingHotRecipe(int tier, ItemStack out, AStack left, AStack right) { + super(tier, out, left, right); + } + + public boolean doesStackMatch(ItemStack input, AStack recipe) { + + if(input != null && input.getItem() instanceof ItemHot) { + double heat = ItemHot.getHeat(input); + + if(heat < 0.5D) + return false; + } + + return recipe.matchesRecipe(input, false); + } + + public ItemStack getOutput(ItemStack left, ItemStack right) { + + if(left.getItem() instanceof ItemHot && right.getItem() instanceof ItemHot && output.getItem() instanceof ItemHot) { + + double h1 = ItemHot.getHeat(left); + double h2 = ItemHot.getHeat(right); + + ItemStack out = output.copy(); + ItemHot.heatUp(out, (h1 + h2) / 2D); + + return out; + } + + return output.copy(); + } +} diff --git a/src/main/java/com/hbm/inventory/AnvilSmithingRecipe.java b/src/main/java/com/hbm/inventory/AnvilSmithingRecipe.java new file mode 100644 index 000000000..ac1a62d49 --- /dev/null +++ b/src/main/java/com/hbm/inventory/AnvilSmithingRecipe.java @@ -0,0 +1,60 @@ +package com.hbm.inventory; + +import com.hbm.inventory.RecipesCommon.AStack; + +import net.minecraft.item.ItemStack; + +public class AnvilSmithingRecipe { + + public int tier; + ItemStack output; + AStack left; + AStack right; + boolean shapeless = false; + + public AnvilSmithingRecipe(int tier, ItemStack out, AStack left, AStack right) { + this.tier = tier; + this.output = out; + this.left = left; + this.right = right; + } + + public AnvilSmithingRecipe makeShapeless() { + this.shapeless = true; + return this; + } + + public boolean matches(ItemStack left, ItemStack right) { + return matchesInt(left, right) != -1; + } + + public int matchesInt(ItemStack left, ItemStack right) { + + if(doesStackMatch(left, this.left) && doesStackMatch(right, this.right)) + return 0; + + if(shapeless) { + return doesStackMatch(right, this.left) && doesStackMatch(left, this.right) ? 1 : -1; + } + + return -1; + } + + public boolean doesStackMatch(ItemStack input, AStack recipe) { + return recipe.matchesRecipe(input, false); + } + + public ItemStack getOutput(ItemStack left, ItemStack right) { + return output.copy(); + } + + public int amountConsumed(int index, boolean mirrored) { + + if(index == 0) + return mirrored ? right.stacksize : left.stacksize; + if(index == 1) + return mirrored ? left.stacksize : right.stacksize; + + return 0; + } +} diff --git a/src/main/java/com/hbm/inventory/CrystallizerRecipes.java b/src/main/java/com/hbm/inventory/CrystallizerRecipes.java index 774be3c94..2da4c0760 100644 --- a/src/main/java/com/hbm/inventory/CrystallizerRecipes.java +++ b/src/main/java/com/hbm/inventory/CrystallizerRecipes.java @@ -60,6 +60,7 @@ public class CrystallizerRecipes { recipes.put(new ComparableStack(ModItems.coal_infernal), new ItemStack(ModItems.solid_fuel)); recipes.put(new ComparableStack(ModItems.cinnebar), new ItemStack(ModItems.nugget_mercury, 3)); recipes.put("blockCoal", new ItemStack(ModBlocks.block_graphite)); + recipes.put(new ComparableStack(ModBlocks.stone_gneiss), new ItemStack(ModItems.powder_lithium)); recipes.put(new ComparableStack(ModItems.powder_diamond), new ItemStack(Items.diamond)); recipes.put(new ComparableStack(ModItems.powder_emerald), new ItemStack(Items.emerald)); diff --git a/src/main/java/com/hbm/inventory/HadronRecipes.java b/src/main/java/com/hbm/inventory/HadronRecipes.java index 87a97634d..535cf56c8 100644 --- a/src/main/java/com/hbm/inventory/HadronRecipes.java +++ b/src/main/java/com/hbm/inventory/HadronRecipes.java @@ -69,6 +69,14 @@ public class HadronRecipes { new ItemStack(ModItems.particle_empty), false )); + recipes.add(new HadronRecipe( + new ItemStack(ModItems.particle_muon), + new ItemStack(ModItems.particle_higgs), + 1000, + new ItemStack(ModItems.particle_tachyon), + new ItemStack(ModItems.particle_empty), + true + )); recipes.add(new HadronRecipe( new ItemStack(ModItems.particle_muon), new ItemStack(ModItems.particle_dark), diff --git a/src/main/java/com/hbm/inventory/RecipesCommon.java b/src/main/java/com/hbm/inventory/RecipesCommon.java index ac4dc380d..964de761b 100644 --- a/src/main/java/com/hbm/inventory/RecipesCommon.java +++ b/src/main/java/com/hbm/inventory/RecipesCommon.java @@ -52,6 +52,8 @@ public class RecipesCommon { /* * Is it unprofessional to pool around in child classes from an abstract superclass? Do I look like I give a shit? + * + * Major fuckup: comparablestacks need EQUAL stacksize but the oredictstack ignores stack size entirely */ public boolean isApplicable(ComparableStack comp) { @@ -72,7 +74,13 @@ public class RecipesCommon { return false; } - public abstract boolean matchesRecipe(ItemStack stack); + /** + * Whether the supplied itemstack is applicable for a recipe (e.g. anvils). Slightly different from {@code isApplicable}. + * @param stack the ItemStack to check + * @param ignoreSize whether size should be ignored entirely or if the ItemStack needs to be >at least< the same size as this' size + * @return + */ + public abstract boolean matchesRecipe(ItemStack stack, boolean ignoreSize); public abstract AStack copy(); } @@ -216,7 +224,7 @@ public class RecipesCommon { } @Override - public boolean matchesRecipe(ItemStack stack) { + public boolean matchesRecipe(ItemStack stack, boolean ignoreSize) { if(stack == null) return false; @@ -227,7 +235,7 @@ public class RecipesCommon { if(this.meta != OreDictionary.WILDCARD_VALUE && stack.getItemDamage() != this.meta) return false; - if(stack.stackSize < this.stacksize) + if(!ignoreSize && stack.stackSize < this.stacksize) return false; return true; @@ -323,11 +331,14 @@ public class RecipesCommon { } @Override - public boolean matchesRecipe(ItemStack stack) { + public boolean matchesRecipe(ItemStack stack, boolean ignoreSize) { if(stack == null) return false; + if(!ignoreSize && stack.stackSize < this.stacksize) + return false; + int[] ids = OreDictionary.getOreIDs(stack); if(ids == null || ids.length == 0) diff --git a/src/main/java/com/hbm/inventory/container/ContainerAnvil.java b/src/main/java/com/hbm/inventory/container/ContainerAnvil.java index 259ce4d80..4aefb6992 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerAnvil.java +++ b/src/main/java/com/hbm/inventory/container/ContainerAnvil.java @@ -1,7 +1,7 @@ package com.hbm.inventory.container; import com.hbm.inventory.AnvilRecipes; -import com.hbm.inventory.AnvilRecipes.AnvilSmithingRecipe; +import com.hbm.inventory.AnvilSmithingRecipe; import com.hbm.inventory.SlotMachineOutput; import net.minecraft.entity.player.EntityPlayer; @@ -38,7 +38,7 @@ public class ContainerAnvil extends Container { return; } - for(AnvilSmithingRecipe rec : AnvilRecipes.getSmithing()) { + for(com.hbm.inventory.AnvilSmithingRecipe rec : AnvilRecipes.getSmithing()) { int i = rec.matchesInt(left, right); @@ -160,7 +160,7 @@ public class ContainerAnvil extends Container { for(AnvilSmithingRecipe rec : AnvilRecipes.getSmithing()) { - if(rec.matches(left, right)) { + if(rec.matches(left, right) && rec.tier <= this.tier) { this.output.setInventorySlotContents(0, rec.getOutput(left, right)); return; } diff --git a/src/main/java/com/hbm/inventory/gui/GUIAnvil.java b/src/main/java/com/hbm/inventory/gui/GUIAnvil.java index 6d6bb9453..c62b8c05a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIAnvil.java +++ b/src/main/java/com/hbm/inventory/gui/GUIAnvil.java @@ -14,6 +14,8 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.container.ContainerAnvil; import com.hbm.lib.RefStrings; +import com.hbm.packet.AnvilCraftPacket; +import com.hbm.packet.PacketDispatcher; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; @@ -134,8 +136,12 @@ public class GUIAnvil extends GuiContainer { } if(guiLeft + 52 <= x && guiLeft + 52 + 18 > x && guiTop + 53 < y && guiTop + 53 + 18 >= y) { + + if(this.selection == -1) + return; + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); - //craft + PacketDispatcher.wrapper.sendToServer(new AnvilCraftPacket(this.recipes.get(this.selection), Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) ? 1 : 0)); return; } @@ -288,6 +294,19 @@ public class GUIAnvil extends GuiContainer { this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, this.xSize, this.ySize); int slide = MathHelper.clamp_int(this.lastSize - 42, 0, 1000); + + int mul = 1; + while(true) { + + if(slide >= 51 * mul) { + this.drawTexturedModalRect(guiLeft + 125 + 51 * mul, guiTop + 17, 125, 17, 54, 108); + mul++; + + } else { + break; + } + } + this.drawTexturedModalRect(guiLeft + 125 + slide, guiTop + 17, 125, 17, 54, 108); if(this.search.isFocused()) { @@ -352,7 +371,6 @@ public class GUIAnvil extends GuiContainer { } super.keyTyped(c, key); - } } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 854803585..8f899e83f 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -735,6 +735,7 @@ public class ModItems { public static Item particle_aschrab; public static Item particle_higgs; public static Item particle_muon; + public static Item particle_tachyon; public static Item particle_strange; public static Item particle_dark; public static Item particle_sparkticle; @@ -1914,6 +1915,8 @@ public class ModItems { public static Item jetpack_break; public static Item jetpack_fly; public static Item jetpack_vector; + public static Item wings_limp; + public static Item wings_murk; public static Item jackt; public static Item jackt2; @@ -2979,6 +2982,7 @@ public class ModItems { particle_aschrab = new Item().setUnlocalizedName("particle_aschrab").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_aschrab"); particle_higgs = new Item().setUnlocalizedName("particle_higgs").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_higgs"); particle_muon = new Item().setUnlocalizedName("particle_muon").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_muon"); + particle_tachyon = new Item().setUnlocalizedName("particle_tachyon").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_tachyon"); particle_strange = new Item().setUnlocalizedName("particle_strange").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_strange"); particle_dark = new Item().setUnlocalizedName("particle_dark").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_dark"); particle_sparkticle = new Item().setUnlocalizedName("particle_sparkticle").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_sparkticle"); @@ -3347,7 +3351,7 @@ public class ModItems { rbmk_fuel_ueu = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_ueu) .setYield(100000000D) .setStats(15) - .setFunction(EnumBurnFunc.PLATEU) + .setFunction(EnumBurnFunc.LOG_TEN) .setMeltingPoint(2865) .addRadiation(ItemHazard.u * ItemHazard.rod_rbmk).toItem() .setUnlocalizedName("rbmk_fuel_ueu").setTextureName(RefStrings.MODID + ":rbmk_fuel_ueu"); @@ -3516,7 +3520,7 @@ public class ModItems { .setUnlocalizedName("rbmk_fuel_pu238be").setTextureName(RefStrings.MODID + ":rbmk_fuel_pu238be"); rbmk_fuel_balefire_gold = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_balefire_gold) .setYield(100000000D) - .setStats(10, 50) + .setStats(50, 10) .setFunction(EnumBurnFunc.ARCH) .setMeltingPoint(2000) .addRadiation(ItemHazard.au198 * ItemHazard.rod_rbmk).toItem() @@ -4640,6 +4644,7 @@ public class ModItems { dns_helmet = new ArmorDNT(aMatDNS, 7, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 1000000000, 1000000, 100000, 115) .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 9)) .addEffect(new PotionEffect(Potion.digSpeed.id, 20, 7)) + .addEffect(new PotionEffect(Potion.jump.id, 20, 2)) .setHasGeigerSound(true) .enableVATS(true) .enableThermalSight(true) @@ -4974,6 +4979,8 @@ public class ModItems { jetpack_break = new JetpackBreak(FluidType.KEROSENE, 12000).setUnlocalizedName("jetpack_break").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_break"); jetpack_fly = new JetpackRegular(FluidType.KEROSENE, 12000).setUnlocalizedName("jetpack_fly").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_fly"); jetpack_vector = new JetpackVectorized(FluidType.KEROSENE, 16000).setUnlocalizedName("jetpack_vector").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":jetpack_vector"); + wings_murk = new WingsMurk(MainRegistry.aMatCobalt).setUnlocalizedName("wings_murk").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wings_murk"); + wings_limp = new WingsMurk(MainRegistry.aMatCobalt).setUnlocalizedName("wings_limp").setCreativeTab(CreativeTabs.tabCombat).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":wings_limp"); cape_test = new ArmorModel(MainRegistry.enumArmorMaterialEmerald, 9, 1).setUnlocalizedName("cape_test").setCreativeTab(null).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_test"); cape_radiation = new ArmorModel(ArmorMaterial.CHAIN, 9, 1).setUnlocalizedName("cape_radiation").setCreativeTab(MainRegistry.consumableTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cape_radiation"); @@ -5835,6 +5842,7 @@ public class ModItems { GameRegistry.registerItem(particle_aschrab, particle_aschrab.getUnlocalizedName()); GameRegistry.registerItem(particle_higgs, particle_higgs.getUnlocalizedName()); GameRegistry.registerItem(particle_muon, particle_muon.getUnlocalizedName()); + GameRegistry.registerItem(particle_tachyon, particle_tachyon.getUnlocalizedName()); GameRegistry.registerItem(particle_strange, particle_strange.getUnlocalizedName()); GameRegistry.registerItem(particle_dark, particle_dark.getUnlocalizedName()); GameRegistry.registerItem(particle_sparkticle, particle_sparkticle.getUnlocalizedName()); @@ -7390,6 +7398,8 @@ public class ModItems { GameRegistry.registerItem(jetpack_break, jetpack_break.getUnlocalizedName()); GameRegistry.registerItem(jetpack_vector, jetpack_vector.getUnlocalizedName()); GameRegistry.registerItem(jetpack_boost, jetpack_boost.getUnlocalizedName()); + GameRegistry.registerItem(wings_limp, wings_limp.getUnlocalizedName()); + GameRegistry.registerItem(wings_murk, wings_murk.getUnlocalizedName()); //GameRegistry.registerItem(australium_iv, australium_iv.getUnlocalizedName()); //GameRegistry.registerItem(australium_v, australium_v.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java b/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java index 7636fd291..ba6b58694 100644 --- a/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java +++ b/src/main/java/com/hbm/items/armor/ArmorBJJetpack.java @@ -3,10 +3,7 @@ package com.hbm.items.armor; import java.util.List; import com.hbm.extprop.HbmPlayerProps; -import com.hbm.handler.HbmKeybinds.EnumKeybind; -import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.KeybindPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.render.model.ModelArmorBJ; import com.hbm.util.I18nUtil; @@ -49,33 +46,20 @@ public class ArmorBJJetpack extends ArmorBJ { HbmPlayerProps props = HbmPlayerProps.getData(player); - if(world.isRemote) { + if(!world.isRemote) { - if(player == MainRegistry.proxy.me()) { - - boolean last = props.getKeyPressed(EnumKeybind.JETPACK); - boolean current = MainRegistry.proxy.getIsKeyPressed(EnumKeybind.JETPACK); - - if(last != current) { - PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.JETPACK, current)); - props.setKeyPressed(EnumKeybind.JETPACK, current); - } - } - - } else { - - if(this.hasFSBArmor(player) && props.getKeyPressed(EnumKeybind.JETPACK)) { + if(this.hasFSBArmor(player) && props.isJetpackActive()) { - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "jetpack_bj"); - data.setInteger("player", player.getEntityId()); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "jetpack_bj"); + data.setInteger("player", player.getEntityId()); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); } } if(this.hasFSBArmor(player)) { - if(props.getKeyPressed(EnumKeybind.JETPACK)) { + if(props.isJetpackActive()) { if(player.motionY < 0.4D) player.motionY += 0.1D; diff --git a/src/main/java/com/hbm/items/armor/ArmorDNT.java b/src/main/java/com/hbm/items/armor/ArmorDNT.java index 330226486..61b80595e 100644 --- a/src/main/java/com/hbm/items/armor/ArmorDNT.java +++ b/src/main/java/com/hbm/items/armor/ArmorDNT.java @@ -5,12 +5,9 @@ import java.util.UUID; import com.google.common.collect.Multimap; import com.hbm.extprop.HbmPlayerProps; -import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.items.ModItems; import com.hbm.lib.Library; -import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.KeybindPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.render.model.ModelArmorDNT; import com.hbm.util.I18nUtil; @@ -77,23 +74,10 @@ public class ArmorDNT extends ArmorFSBPowered { player.getAttributeMap().applyAttributeModifiers(multimap); } - if(world.isRemote) { - - if(player == MainRegistry.proxy.me()) { - - boolean last = props.getKeyPressed(EnumKeybind.JETPACK); - boolean current = MainRegistry.proxy.getIsKeyPressed(EnumKeybind.JETPACK); - - if(last != current) { - PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.JETPACK, current)); - props.setKeyPressed(EnumKeybind.JETPACK, current); - } - } - - } else { + if(!world.isRemote) { /// JET /// - if(this.hasFSBArmor(player) && props.getKeyPressed(EnumKeybind.JETPACK) || (!player.onGround && !player.isSneaking())) { + if(this.hasFSBArmor(player) && (props.isJetpackActive() || (!player.onGround && !player.isSneaking() && props.enableBackpack))) { NBTTagCompound data = new NBTTagCompound(); data.setString("type", "jetpack_dns"); @@ -104,7 +88,7 @@ public class ArmorDNT extends ArmorFSBPowered { if(this.hasFSBArmor(player)) { - if(props.getKeyPressed(EnumKeybind.JETPACK)) { + if(props.isJetpackActive()) { if(player.motionY < 0.6D) player.motionY += 0.2D; @@ -113,7 +97,7 @@ public class ArmorDNT extends ArmorFSBPowered { world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.immolatorShoot", 0.125F, 1.5F); - } else if(!player.isSneaking() && !player.onGround) { + } else if(!player.isSneaking() && !player.onGround && props.enableBackpack) { player.fallDistance = 0; if(player.motionY < -1) @@ -125,6 +109,11 @@ public class ArmorDNT extends ArmorFSBPowered { player.motionX *= 1.05D; player.motionZ *= 1.05D; + + if(player.moveForward != 0) { + player.motionX += player.getLookVec().xCoord * 0.25 * player.moveForward; + player.motionZ += player.getLookVec().zCoord * 0.25 * player.moveForward; + } world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.immolatorShoot", 0.125F, 1.5F); } diff --git a/src/main/java/com/hbm/items/armor/JetpackBooster.java b/src/main/java/com/hbm/items/armor/JetpackBooster.java index e0e6af660..c12faafb4 100644 --- a/src/main/java/com/hbm/items/armor/JetpackBooster.java +++ b/src/main/java/com/hbm/items/armor/JetpackBooster.java @@ -4,10 +4,7 @@ import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.FluidTypeHandler.FluidType; -import com.hbm.handler.HbmKeybinds.EnumKeybind; -import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.KeybindPacket; import com.hbm.packet.PacketDispatcher; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -32,61 +29,48 @@ public class JetpackBooster extends JetpackBase { } public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - - HbmPlayerProps props = HbmPlayerProps.getData(player); - - if(world.isRemote) { - - if(player == MainRegistry.proxy.me()) { - - boolean last = props.getKeyPressed(EnumKeybind.JETPACK); - boolean current = MainRegistry.proxy.getIsKeyPressed(EnumKeybind.JETPACK); - - if(last != current) { - PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.JETPACK, current)); - props.setKeyPressed(EnumKeybind.JETPACK, current); - } - } - - } else { - - if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "jetpack"); - data.setInteger("player", player.getEntityId()); - data.setInteger("mode", 1); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); + HbmPlayerProps props = HbmPlayerProps.getData(player); + + if(!world.isRemote) { + + if(getFuel(stack) > 0 && props.isJetpackActive()) { + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "jetpack"); + data.setInteger("player", player.getEntityId()); + data.setInteger("mode", 1); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); } } - if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { - + if(getFuel(stack) > 0 && props.isJetpackActive()) { + if(player.motionY < 0.6D) player.motionY += 0.1D; - + Vec3 look = player.getLookVec(); - + if(Vec3.createVectorHelper(player.motionX, player.motionY, player.motionZ).lengthVector() < 5) { player.motionX += look.xCoord * 0.25; player.motionY += look.yCoord * 0.25; player.motionZ += look.zCoord * 0.25; - + if(look.yCoord > 0) player.fallDistance = 0; } - + world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.0F); this.useUpFuel(player, stack, 1); } - } - - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + } - list.add("High-powered vectorized jetpack."); - list.add("Highly increased fuel consumption."); - - super.addInformation(stack, player, list, ext); - } + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + + list.add("High-powered vectorized jetpack."); + list.add("Highly increased fuel consumption."); + + super.addInformation(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/items/armor/JetpackBreak.java b/src/main/java/com/hbm/items/armor/JetpackBreak.java index f65a8201a..e6e816b2d 100644 --- a/src/main/java/com/hbm/items/armor/JetpackBreak.java +++ b/src/main/java/com/hbm/items/armor/JetpackBreak.java @@ -4,10 +4,7 @@ import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.FluidTypeHandler.FluidType; -import com.hbm.handler.HbmKeybinds.EnumKeybind; -import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.KeybindPacket; import com.hbm.packet.PacketDispatcher; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -36,22 +33,9 @@ public class JetpackBreak extends JetpackBase { HbmPlayerProps props = HbmPlayerProps.getData(player); - if(world.isRemote) { + if(!world.isRemote) { - if(player == MainRegistry.proxy.me()) { - - boolean last = props.getKeyPressed(EnumKeybind.JETPACK); - boolean current = MainRegistry.proxy.getIsKeyPressed(EnumKeybind.JETPACK); - - if(last != current) { - PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.JETPACK, current)); - props.setKeyPressed(EnumKeybind.JETPACK, current); - } - } - - } else { - - if(getFuel(stack) > 0 && (props.getKeyPressed(EnumKeybind.JETPACK) || (!player.onGround && !player.isSneaking()))) { + if(getFuel(stack) > 0 && (props.isJetpackActive() || (!player.onGround && !player.isSneaking() && props.enableBackpack))) { NBTTagCompound data = new NBTTagCompound(); data.setString("type", "jetpack"); @@ -62,7 +46,7 @@ public class JetpackBreak extends JetpackBase { if(getFuel(stack) > 0) { - if(props.getKeyPressed(EnumKeybind.JETPACK)) { + if(props.isJetpackActive()) { player.fallDistance = 0; if(player.motionY < 0.4D) @@ -71,7 +55,7 @@ public class JetpackBreak extends JetpackBase { world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); this.useUpFuel(player, stack, 5); - } else if(!player.isSneaking() && !player.onGround) { + } else if(!player.isSneaking() && !player.onGround && props.enableBackpack) { player.fallDistance = 0; if(player.motionY < -1) diff --git a/src/main/java/com/hbm/items/armor/JetpackRegular.java b/src/main/java/com/hbm/items/armor/JetpackRegular.java index 67e9ddeb0..f7b64cc04 100644 --- a/src/main/java/com/hbm/items/armor/JetpackRegular.java +++ b/src/main/java/com/hbm/items/armor/JetpackRegular.java @@ -4,10 +4,7 @@ import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.FluidTypeHandler.FluidType; -import com.hbm.handler.HbmKeybinds.EnumKeybind; -import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.KeybindPacket; import com.hbm.packet.PacketDispatcher; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -31,49 +28,36 @@ public class JetpackRegular extends JetpackBase { } public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - - HbmPlayerProps props = HbmPlayerProps.getData(player); - - if(world.isRemote) { - - if(player == MainRegistry.proxy.me()) { - - boolean last = props.getKeyPressed(EnumKeybind.JETPACK); - boolean current = MainRegistry.proxy.getIsKeyPressed(EnumKeybind.JETPACK); - - if(last != current) { - PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.JETPACK, current)); - props.setKeyPressed(EnumKeybind.JETPACK, current); - } - } - - } else { - - if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "jetpack"); - data.setInteger("player", player.getEntityId()); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); + HbmPlayerProps props = HbmPlayerProps.getData(player); + + if(!world.isRemote) { + + if(getFuel(stack) > 0 && props.isJetpackActive()) { + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "jetpack"); + data.setInteger("player", player.getEntityId()); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); } } - if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { + if(getFuel(stack) > 0 && props.isJetpackActive()) { player.fallDistance = 0; - + if(player.motionY < 0.4D) player.motionY += 0.1D; - + world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); this.useUpFuel(player, stack, 5); } - } - - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + } - list.add("Regular jetpack for simple upwards momentum."); - - super.addInformation(stack, player, list, ext); - } + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + + list.add("Regular jetpack for simple upwards momentum."); + + super.addInformation(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/items/armor/JetpackVectorized.java b/src/main/java/com/hbm/items/armor/JetpackVectorized.java index 4f2454405..838700e6e 100644 --- a/src/main/java/com/hbm/items/armor/JetpackVectorized.java +++ b/src/main/java/com/hbm/items/armor/JetpackVectorized.java @@ -4,19 +4,14 @@ import java.util.List; import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.FluidTypeHandler.FluidType; -import com.hbm.handler.HbmKeybinds.EnumKeybind; -import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.KeybindPacket; import com.hbm.packet.PacketDispatcher; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -34,61 +29,48 @@ public class JetpackVectorized extends JetpackBase { } public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - - HbmPlayerProps props = HbmPlayerProps.getData(player); - - if(world.isRemote) { - - if(player == MainRegistry.proxy.me()) { - - boolean last = props.getKeyPressed(EnumKeybind.JETPACK); - boolean current = MainRegistry.proxy.getIsKeyPressed(EnumKeybind.JETPACK); - - if(last != current) { - PacketDispatcher.wrapper.sendToServer(new KeybindPacket(EnumKeybind.JETPACK, current)); - props.setKeyPressed(EnumKeybind.JETPACK, current); - } - } - - } else { - - if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "jetpack"); - data.setInteger("player", player.getEntityId()); - data.setInteger("mode", 1); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); + HbmPlayerProps props = HbmPlayerProps.getData(player); + + if(!world.isRemote) { + + if(getFuel(stack) > 0 && props.isJetpackActive()) { + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "jetpack"); + data.setInteger("player", player.getEntityId()); + data.setInteger("mode", 1); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, player.posX, player.posY, player.posZ), new TargetPoint(world.provider.dimensionId, player.posX, player.posY, player.posZ, 100)); } } - if(getFuel(stack) > 0 && props.getKeyPressed(EnumKeybind.JETPACK)) { - + if(getFuel(stack) > 0 && props.isJetpackActive()) { + if(player.motionY < 0.4D) player.motionY += 0.1D; - + Vec3 look = player.getLookVec(); - + if(Vec3.createVectorHelper(player.motionX, player.motionY, player.motionZ).lengthVector() < 2) { player.motionX += look.xCoord * 0.1; player.motionY += look.yCoord * 0.1; player.motionZ += look.zCoord * 0.1; - + if(look.yCoord > 0) player.fallDistance = 0; } - + world.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.flamethrowerShoot", 0.25F, 1.5F); this.useUpFuel(player, stack, 3); } - } - - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + } - list.add("High-mobility jetpack."); - list.add("Higher fuel consumption."); - - super.addInformation(stack, player, list, ext); - } + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + + list.add("High-mobility jetpack."); + list.add("Higher fuel consumption."); + + super.addInformation(stack, player, list, ext); + } } diff --git a/src/main/java/com/hbm/items/armor/WingsMurk.java b/src/main/java/com/hbm/items/armor/WingsMurk.java new file mode 100644 index 000000000..5415e1e8c --- /dev/null +++ b/src/main/java/com/hbm/items/armor/WingsMurk.java @@ -0,0 +1,65 @@ +package com.hbm.items.armor; + +import com.hbm.items.ModItems; +import com.hbm.render.model.ModelArmorWings; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class WingsMurk extends ItemArmor { + + public WingsMurk(ArmorMaterial material) { + super(material, 7, 1); + } + + @SideOnly(Side.CLIENT) + ModelArmorWings model; + + @Override + @SideOnly(Side.CLIENT) + public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { + + if(model == null) { + model = new ModelArmorWings(this == ModItems.wings_murk ? 0 : 1); + } + + return model; + } + + public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { + + if(player.fallDistance > 0) + player.fallDistance = 0; + + if(player.motionY < -0.4D) + player.motionY = -0.4D; + + if(this == ModItems.wings_limp) { + + if(player.isSneaking()) { + + if(player.motionY < -0.08) { + + double mo = player.motionY * -0.2; + player.motionY += mo; + + Vec3 vec = player.getLookVec(); + vec.xCoord *= mo; + vec.yCoord *= mo; + vec.zCoord *= mo; + + player.motionX += vec.xCoord; + player.motionY += vec.yCoord; + player.motionZ += vec.zCoord; + } + } + } + } +} diff --git a/src/main/java/com/hbm/items/weapon/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/ItemGunBase.java index c5b84f4f8..b85fa9ee8 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunBase.java @@ -7,9 +7,12 @@ import org.lwjgl.input.Mouse; import com.hbm.config.GeneralConfig; import com.hbm.entity.projectile.EntityBulletBase; +import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; +import com.hbm.handler.HbmKeybinds; +import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.interfaces.IHoldableWeapon; import com.hbm.interfaces.IItemHUD; import com.hbm.packet.AuxParticlePacketNT; @@ -107,7 +110,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD { if(mainConfig.reloadType != mainConfig.RELOAD_NONE || (altConfig != null && altConfig.reloadType != 0)) { - if(Keyboard.isKeyDown(Keyboard.KEY_R) && (getMag(stack) < mainConfig.ammoCap || (mainConfig.allowsInfinity && EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0))) { + if(Keyboard.isKeyDown(HbmKeybinds.reloadKey.getKeyCode()) && (getMag(stack) < mainConfig.ammoCap || (mainConfig.allowsInfinity && EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0))) { PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 2)); setIsReloading(stack, true); resetReloadCycle(stack); diff --git a/src/main/java/com/hbm/items/weapon/ItemGunDart.java b/src/main/java/com/hbm/items/weapon/ItemGunDart.java index 695c0432c..1840cda68 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunDart.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunDart.java @@ -23,15 +23,19 @@ public class ItemGunDart extends ItemGunBase implements IDesignatorItem { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); - + stack.stackTagCompound.setString("player", player.getDisplayName()); + stack.stackTagCompound.setLong("lease", player.worldObj.getTotalWorldTime() + 60 * 60 * 20); } - public static EntityPlayer readPlayer(ItemStack stack) { + public static EntityPlayer readPlayer(World world, ItemStack stack) { if(!stack.hasTagCompound()) return null; + if(stack.stackTagCompound.getLong("lease") < world.getTotalWorldTime()) + return null; + return MinecraftServer.getServer().getConfigurationManager().func_152612_a(stack.stackTagCompound.getString("player")); } @@ -41,7 +45,7 @@ public class ItemGunDart extends ItemGunBase implements IDesignatorItem { super.startAction(stack, world, player, main); } else { - EntityPlayer target = readPlayer(stack); + EntityPlayer target = readPlayer(world, stack); if(target != null) { @@ -62,13 +66,13 @@ public class ItemGunDart extends ItemGunBase implements IDesignatorItem { @Override public boolean isReady(World world, ItemStack stack, int x, int y, int z) { - EntityPlayer target = readPlayer(stack); + EntityPlayer target = readPlayer(world, stack); return target != null && target.dimension == world.provider.dimensionId; } @Override public Vec3 getCoords(World world, ItemStack stack, int x, int y, int z) { - EntityPlayer target = readPlayer(stack); + EntityPlayer target = readPlayer(world, stack); return Vec3.createVectorHelper(target.posX, target.posY, target.posZ); } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index d0d8f39ca..0d154f2a5 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -47,6 +47,7 @@ import com.hbm.entity.mob.botprime.EntityBOTPrimeBody; import com.hbm.entity.mob.botprime.EntityBOTPrimeHead; import com.hbm.entity.particle.*; import com.hbm.entity.projectile.*; +import com.hbm.handler.HbmKeybinds; import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; @@ -1439,9 +1440,13 @@ public class ClientProxy extends ServerProxy { @Override public boolean getIsKeyPressed(EnumKeybind key) { - + if(key == EnumKeybind.JETPACK) return Minecraft.getMinecraft().gameSettings.keyBindJump.getIsKeyPressed(); + if(key == EnumKeybind.TOGGLE_JETPACK) + return HbmKeybinds.jetpackKey.getIsKeyPressed(); + if(key == EnumKeybind.TOGGLE_HEAD) + return HbmKeybinds.hudKey.getIsKeyPressed(); return false; } diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 96d3be728..89470f872 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -223,7 +223,7 @@ public class CraftingManager { GameRegistry.addShapelessRecipe(new ItemStack(ModItems.toothpicks, 3), new Object[] { Items.stick, Items.stick, Items.stick }); GameRegistry.addShapedRecipe(new ItemStack(ModItems.ducttape, 6), new Object[] { "FSF", "SPS", "FSF", 'F', Items.string, 'S', Items.slime_ball, 'P', Items.paper }); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_difurnace_off), 1), new Object[] { "T T", "PHP", "TFT", 'T', "ingotTungsten", 'P', ModItems.board_copper, 'H', Blocks.hopper, 'F', Blocks.furnace })); + //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_difurnace_off), 1), new Object[] { "T T", "PHP", "TFT", 'T', "ingotTungsten", 'P', ModItems.board_copper, 'H', Blocks.hopper, 'F', Blocks.furnace })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_uf6_tank), 1), new Object[] { "WTW", "WTW", "SRS", 'S', "plateIron", 'W', ModItems.coil_tungsten, 'T', ModItems.tank_steel, 'W', ModItems.coil_tungsten,'R', "ingotRedCopperAlloy" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_puf6_tank), 1), new Object[] { "WTW", "WTW", "SRS", 'S', "plateSteel", 'W', ModItems.coil_tungsten, 'T', ModItems.tank_steel, 'W', ModItems.coil_tungsten,'R', "ingotRedCopperAlloy" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_nuke_furnace_off), 1), new Object[] { "SSS", "LFL", "CCC", 'S', "plateSteel", 'C', ModItems.board_copper, 'L', "plateLead", 'F', Item.getItemFromBlock(Blocks.furnace) })); @@ -511,7 +511,7 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.crystal_pulsar, 32), new Object[] { "STS", "THT", "STS", 'S', ModItems.cell_uf6, 'T', "dustAluminum", 'H', ModItems.crystal_charred })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.fluid_duct, 8), new Object[] { "SAS", " ", "SAS", 'S', "plateSteel", 'A', "plateAluminum" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_assembler, 1), new Object[] { "WWW", "MCM", "ISI", 'W', "paneGlass", 'M', ModItems.motor, 'C', ModItems.circuit_aluminium, 'I', "blockCopper", 'S', "blockSteel" })); + //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_assembler, 1), new Object[] { "WWW", "MCM", "ISI", 'W', "paneGlass", 'M', ModItems.motor, 'C', ModItems.circuit_aluminium, 'I', "blockCopper", 'S', "blockSteel" })); GameRegistry.addRecipe(new ItemStack(ModItems.template_folder, 1), new Object[] { "LPL", "BPB", "LPL", 'P', Items.paper, 'L', new ItemStack(Items.dye, 1, 4), 'B', new ItemStack(Items.dye, 1, 15) }); //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.turret_control, 1), new Object[] { "R12", "PPI", " I", 'R', Items.redstone, '1', ModItems.circuit_aluminium, '2', ModItems.circuit_red_copper, 'P', "plateSteel", 'I', "ingotSteel" })); GameRegistry.addRecipe(new ItemStack(ModItems.pellet_antimatter, 1), new Object[] { "###", "###", "###", '#', ModItems.cell_antimatter }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index dbaf280b0..6f3b7f10a 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1173,6 +1173,10 @@ public class MainRegistry { ChunkRadiationManager radiationSystem = new ChunkRadiationManager(); MinecraftForge.EVENT_BUS.register(radiationSystem); FMLCommonHandler.instance().bus().register(radiationSystem); + + HbmKeybinds.register(); + HbmKeybinds keyHandler = new HbmKeybinds(); + FMLCommonHandler.instance().bus().register(keyHandler); } //yes kids, this is where we would usually register commands diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 4e08d52b0..fac6533f4 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -41,7 +41,6 @@ import com.hbm.items.armor.ArmorFSB; import com.hbm.items.armor.ItemArmorMod; import com.hbm.items.armor.ItemModRevive; import com.hbm.items.armor.ItemModShackles; -import com.hbm.items.special.ItemHot; import com.hbm.items.weapon.ItemGunBase; import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; @@ -185,7 +184,7 @@ public class ModEventHandler { ItemStack stack = event.entityLiving.getEquipmentInSlot(i); if(stack != null && stack.getItem() instanceof ItemArmor && ArmorModHandler.hasMods(stack)) { - + ItemStack revive = ArmorModHandler.pryMods(stack)[ArmorModHandler.extra]; if(revive != null) { @@ -209,8 +208,13 @@ public class ModEventHandler { //Shackles if(revive.getItem() instanceof ItemModShackles && HbmLivingProps.getRadiation(event.entityLiving) < 1000F) { + revive.setItemDamage(revive.getItemDamage() + 1); + + int dmg = revive.getItemDamage(); + ArmorModHandler.applyMod(stack, revive); + event.entityLiving.setHealth(event.entityLiving.getMaxHealth()); - HbmLivingProps.incrementRadiation(event.entityLiving, Math.max(HbmLivingProps.getRadiation(event.entityLiving), 10F)); + HbmLivingProps.incrementRadiation(event.entityLiving, dmg * dmg); event.setCanceled(true); return; } @@ -1067,86 +1071,21 @@ public class ModEventHandler { if(event.left.getItem() instanceof ItemGunBase && event.right.getItem() == Items.enchanted_book) { event.output = event.left.copy(); - - Map mapright = EnchantmentHelper.getEnchantments(event.right); - Iterator itr = mapright.keySet().iterator(); - - while (itr.hasNext()) { - - int i = ((Integer)itr.next()).intValue(); - int j = ((Integer)mapright.get(Integer.valueOf(i))).intValue(); - Enchantment e = Enchantment.enchantmentsList[i]; - - EnchantmentUtil.removeEnchantment(event.output, e); - EnchantmentUtil.addEnchantment(event.output, e, j); - } - - event.cost = 10; - } - - if(event.left.getItem() == ModItems.ingot_meteorite && event.right.getItem() == ModItems.ingot_meteorite && - event.left.stackSize == 1 && event.right.stackSize == 1) { - double h1 = ItemHot.getHeat(event.left); - double h2 = ItemHot.getHeat(event.right); + Map mapright = EnchantmentHelper.getEnchantments(event.right); + Iterator itr = mapright.keySet().iterator(); - if(h1 >= 0.5 && h2 >= 0.5) { - - ItemStack out = new ItemStack(ModItems.ingot_meteorite_forged); - ItemHot.heatUp(out, (h1 + h2) / 2D); - event.output = out; - event.cost = 10; - } - } - - if(event.left.getItem() == ModItems.ingot_meteorite_forged && event.right.getItem() == ModItems.ingot_meteorite_forged && - event.left.stackSize == 1 && event.right.stackSize == 1) { - - double h1 = ItemHot.getHeat(event.left); - double h2 = ItemHot.getHeat(event.right); - - if(h1 >= 0.5 && h2 >= 0.5) { - - ItemStack out = new ItemStack(ModItems.blade_meteorite); - ItemHot.heatUp(out, (h1 + h2) / 2D); - event.output = out; - event.cost = 30; - } - } - - if(event.left.getItem() == ModItems.meteorite_sword_seared && event.right.getItem() == ModItems.ingot_meteorite_forged && - event.left.stackSize == 1 && event.right.stackSize == 1) { - - double h2 = ItemHot.getHeat(event.right); - - if(h2 >= 0.5) { - - ItemStack out = new ItemStack(ModItems.meteorite_sword_reforged); - event.output = out; - event.cost = 50; - } - } - - if(event.left.getItem() == ModItems.ingot_steel_dusted && event.right.getItem() == ModItems.ingot_steel_dusted && - event.left.stackSize == event.right.stackSize) { - - double h1 = ItemHot.getHeat(event.left); - double h2 = ItemHot.getHeat(event.right); - - if(h2 >= 0.5) { - - int i1 = event.left.getItemDamage(); - int i2 = event.right.getItemDamage(); + while(itr.hasNext()) { - int i3 = Math.min(i1, i2) + 1; + int i = ((Integer) itr.next()).intValue(); + int j = ((Integer) mapright.get(Integer.valueOf(i))).intValue(); + Enchantment e = Enchantment.enchantmentsList[i]; - boolean done = i3 >= 10; - - ItemStack out = new ItemStack(done ? ModItems.ingot_chainsteel : ModItems.ingot_steel_dusted, event.left.stackSize, done ? 0 : i3); - ItemHot.heatUp(out, done ? 1D : (h1 + h2) / 2D); - event.output = out; - event.cost = event.left.stackSize; + EnchantmentUtil.removeEnchantment(event.output, e); + EnchantmentUtil.addEnchantment(event.output, e, j); } + + event.cost = 10; } } } diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 768e9ca13..047de5bca 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -10,6 +10,7 @@ import com.hbm.blocks.generic.BlockAshes; import com.hbm.entity.mob.EntityHunterChopper; import com.hbm.entity.projectile.EntityChopperMine; import com.hbm.extprop.HbmLivingProps; +import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.ArmorModHandler; import com.hbm.handler.HTTPHandler; import com.hbm.handler.HazmatRegistry; @@ -316,6 +317,9 @@ public class ModEventHandlerClient { ((ItemArmorMod)armor.getItem()).modRender(event, armor); } } + + if(player.getCurrentArmor(2) == null) + RenderAccessoryUtility.renderSol(event); } @SubscribeEvent @@ -617,7 +621,7 @@ public class ModEventHandlerClient { ItemStack plate = player.inventory.armorInventory[2]; ArmorFSB chestplate = (ArmorFSB) plate.getItem(); - if(chestplate.thermal) + if(chestplate.thermal && HbmPlayerProps.getData(player).enableHUD) RenderOverhead.renderThermalSight(event.partialTicks); } } @@ -681,7 +685,7 @@ public class ModEventHandlerClient { EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if(ArmorFSB.hasFSBArmor(player)) { + if(ArmorFSB.hasFSBArmor(player) && HbmPlayerProps.getData(player).enableHUD) { ItemStack plate = player.inventory.armorInventory[2]; ArmorFSB chestplate = (ArmorFSB)plate.getItem(); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 9ac266209..9800a81f4 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -556,6 +556,8 @@ public class ResourceManager { public static final IModelCustom armor_fau = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/armor/fau.obj")); public static final IModelCustom armor_dnt = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/armor/dnt.obj")); public static final IModelCustom armor_mod_tesla = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/armor/mod_tesla.obj")); + public static final IModelCustom armor_wings = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/armor/murk.obj")); + public static final IModelCustom armor_solstice = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/armor/solstice.obj")); ////Texture Items @@ -652,6 +654,9 @@ public class ResourceManager { public static final ResourceLocation dnt_arm = new ResourceLocation(RefStrings.MODID, "textures/armor/dnt_arm.png"); public static final ResourceLocation mod_tesla = new ResourceLocation(RefStrings.MODID, "textures/armor/mod_tesla.png"); + + public static final ResourceLocation wings_murk = new ResourceLocation(RefStrings.MODID, "textures/armor/wings_murk.png"); + public static final ResourceLocation wings_solstice = new ResourceLocation(RefStrings.MODID, "textures/armor/wings_solstice.png"); public static final ResourceLocation hat = new ResourceLocation(RefStrings.MODID, "textures/armor/hat.png"); public static final ResourceLocation goggles = new ResourceLocation(RefStrings.MODID, "textures/armor/goggles.png"); diff --git a/src/main/java/com/hbm/packet/AnvilCraftPacket.java b/src/main/java/com/hbm/packet/AnvilCraftPacket.java index eda383cac..ebee0cf5a 100644 --- a/src/main/java/com/hbm/packet/AnvilCraftPacket.java +++ b/src/main/java/com/hbm/packet/AnvilCraftPacket.java @@ -3,6 +3,7 @@ package com.hbm.packet; import com.hbm.inventory.AnvilRecipes; import com.hbm.inventory.AnvilRecipes.AnvilConstructionRecipe; import com.hbm.inventory.container.ContainerAnvil; +import com.hbm.util.InventoryUtil; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; @@ -53,6 +54,19 @@ public class AnvilCraftPacket implements IMessage { if(!recipe.isTierValid(anvil.tier)) //player is using the wrong type of anvil -> bad return null; + int count = m.mode == 1 ? 64 : 1; + + for(int i = 0; i < count; i++) { + + if(InventoryUtil.doesPlayerHaveAStacks(p, recipe.input, true)) { + InventoryUtil.giveChanceStacksToPlayer(p, recipe.output); + } else { + break; + } + } + + p.inventoryContainer.detectAndSendChanges(); + return null; } } diff --git a/src/main/java/com/hbm/render/entity/item/RenderBomber.java b/src/main/java/com/hbm/render/entity/item/RenderBomber.java index b2fa0f239..16d32f88f 100644 --- a/src/main/java/com/hbm/render/entity/item/RenderBomber.java +++ b/src/main/java/com/hbm/render/entity/item/RenderBomber.java @@ -9,56 +9,84 @@ import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; public class RenderBomber extends Render { - - public RenderBomber() { } + + public RenderBomber() { + } @Override - public void doRender(Entity p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) { + public void doRender(Entity entity, double x, double y, double z, float f0, float interp) { GL11.glPushMatrix(); - GL11.glTranslatef((float)p_76986_2_, (float)p_76986_4_, (float)p_76986_6_); - GL11.glRotatef(p_76986_1_.prevRotationYaw + (p_76986_1_.rotationYaw - p_76986_1_.prevRotationYaw) * p_76986_9_ - 90.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(90, 0F, 0F, 1F); - GL11.glRotatef(p_76986_1_.prevRotationPitch + (p_76986_1_.rotationPitch - p_76986_1_.prevRotationPitch) * p_76986_9_, 0.0F, 0.0F, 1.0F); - - //ayy lmao - //GL11.glRotatef(System.currentTimeMillis() / 5 % 360, 1F, 0F, 0F); + GL11.glTranslatef((float) x, (float) y, (float) z); + GL11.glRotatef(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * interp - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(90, 0F, 0F, 1F); + GL11.glRotatef(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * interp, 0.0F, 0.0F, 1.0F); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - - - int i = p_76986_1_.getDataWatcher().getWatchableObjectByte(16); - - switch(i) { - case 0: bindTexture(ResourceManager.dornier_0_tex); break; - case 1: bindTexture(ResourceManager.dornier_1_tex); break; - case 2: bindTexture(ResourceManager.dornier_2_tex); break; - case 3: bindTexture(ResourceManager.dornier_3_tex); break; - case 4: bindTexture(ResourceManager.dornier_4_tex); break; - case 5: bindTexture(ResourceManager.b29_0_tex); break; - case 6: bindTexture(ResourceManager.b29_1_tex); break; - case 7: bindTexture(ResourceManager.b29_2_tex); break; - case 8: bindTexture(ResourceManager.b29_3_tex); break; - default: bindTexture(ResourceManager.dornier_1_tex); break; - } + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); - switch(i) { - case 0: - case 1: - case 2: - case 3: - case 4: GL11.glScalef(5F, 5F, 5F); GL11.glRotatef(-90, 0F, 1F, 0F); ResourceManager.dornier.renderAll(); break; - case 5: - case 6: - case 7: - case 8: GL11.glScalef(30F/3.1F, 30F/3.1F, 30F/3.1F); GL11.glRotatef(180, 0F, 1F, 0F); ResourceManager.b29.renderAll(); break; - default: ResourceManager.dornier.renderAll(); break; - } - + int i = entity.getDataWatcher().getWatchableObjectByte(16); + + switch(i) { + case 0: + bindTexture(ResourceManager.dornier_0_tex); + break; + case 1: + bindTexture(ResourceManager.dornier_1_tex); + break; + case 2: + bindTexture(ResourceManager.dornier_2_tex); + break; + case 3: + bindTexture(ResourceManager.dornier_3_tex); + break; + case 4: + bindTexture(ResourceManager.dornier_4_tex); + break; + case 5: + bindTexture(ResourceManager.b29_0_tex); + break; + case 6: + bindTexture(ResourceManager.b29_1_tex); + break; + case 7: + bindTexture(ResourceManager.b29_2_tex); + break; + case 8: + bindTexture(ResourceManager.b29_3_tex); + break; + default: + bindTexture(ResourceManager.dornier_1_tex); + break; + } + + GL11.glRotatef((float) Math.sin((entity.ticksExisted + interp) * 0.05) * 10, 1F, 0F, 0F); + + switch(i) { + case 0: + case 1: + case 2: + case 3: + case 4: + GL11.glScalef(5F, 5F, 5F); + GL11.glRotatef(-90, 0F, 1F, 0F); + ResourceManager.dornier.renderAll(); + break; + case 5: + case 6: + case 7: + case 8: + GL11.glScalef(30F / 3.1F, 30F / 3.1F, 30F / 3.1F); + GL11.glRotatef(180, 0F, 1F, 0F); + ResourceManager.b29.renderAll(); + break; + default: + ResourceManager.dornier.renderAll(); + break; + } + + GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/render/model/ModelArmorSolstice.java b/src/main/java/com/hbm/render/model/ModelArmorSolstice.java new file mode 100644 index 000000000..868254bb4 --- /dev/null +++ b/src/main/java/com/hbm/render/model/ModelArmorSolstice.java @@ -0,0 +1,28 @@ +package com.hbm.render.model; + +import com.hbm.main.ResourceManager; +import com.hbm.render.loader.ModelRendererObj; + +import net.minecraft.util.ResourceLocation; + +public class ModelArmorSolstice extends ModelArmorWings { + + public ModelArmorSolstice() { + super(0); + + wingLB = new ModelRendererObj(ResourceManager.armor_solstice, "WingLB"); + wingLT = new ModelRendererObj(ResourceManager.armor_solstice, "WingLT"); + wingRB = new ModelRendererObj(ResourceManager.armor_solstice, "WingRB"); + wingRT = new ModelRendererObj(ResourceManager.armor_solstice, "WingRT"); + } + + @Override + protected boolean doesRotateZ() { + return false; + } + + @Override + protected ResourceLocation getTexture() { + return ResourceManager.wings_solstice; + } +} diff --git a/src/main/java/com/hbm/render/model/ModelArmorWings.java b/src/main/java/com/hbm/render/model/ModelArmorWings.java new file mode 100644 index 000000000..3d017a07e --- /dev/null +++ b/src/main/java/com/hbm/render/model/ModelArmorWings.java @@ -0,0 +1,165 @@ +package com.hbm.render.model; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; +import com.hbm.render.loader.ModelRendererObj; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class ModelArmorWings extends ModelArmorBase { + + ModelRendererObj wingLB; + ModelRendererObj wingLT; + ModelRendererObj wingRB; + ModelRendererObj wingRT; + + public ModelArmorWings(int type) { + super(type); + + wingLB = new ModelRendererObj(ResourceManager.armor_wings, "LeftBase"); + wingLT = new ModelRendererObj(ResourceManager.armor_wings, "LeftTip"); + wingRB = new ModelRendererObj(ResourceManager.armor_wings, "RightBase"); + wingRT = new ModelRendererObj(ResourceManager.armor_wings, "RightTip"); + + //i should really stop doing that + head = new ModelRendererObj(ResourceManager.anvil); + body = new ModelRendererObj(ResourceManager.anvil); + leftArm = new ModelRendererObj(ResourceManager.anvil).setRotationPoint(-5.0F, 2.0F, 0.0F); + rightArm = new ModelRendererObj(ResourceManager.anvil).setRotationPoint(5.0F, 2.0F, 0.0F); + leftLeg = new ModelRendererObj(ResourceManager.anvil).setRotationPoint(1.9F, 12.0F, 0.0F); + rightLeg = new ModelRendererObj(ResourceManager.anvil).setRotationPoint(-1.9F, 12.0F, 0.0F); + leftFoot = new ModelRendererObj(ResourceManager.anvil).setRotationPoint(1.9F, 12.0F, 0.0F); + rightFoot = new ModelRendererObj(ResourceManager.anvil).setRotationPoint(-1.9F, 12.0F, 0.0F); + } + + @Override + public void render(Entity entity, float par2, float par3, float par4, float par5, float par6, float par7) { + + setRotationAngles(par2, par3, par4, par5, par6, par7, entity); + //body.copyTo(wingLB); + //body.copyTo(wingLT); + //body.copyTo(wingRB); + //body.copyTo(wingRT); + + GL11.glPushMatrix(); + + Minecraft.getMinecraft().renderEngine.bindTexture(this.getTexture()); + + double px = 0.0625D; + + double rot = Math.sin((entity.ticksExisted) * 0.2D) * 20; + double rot2 = Math.sin((entity.ticksExisted) * 0.2D - Math.PI * 0.5) * 50 + 35; + + int pivotSideOffset = 1; + int pivotFrontOffset = 5; + int pivotZOffset = 3; + int tipSideOffset = 16; + int tipZOffset = 2; + double inwardAngle = 10D; + + GL11.glPushMatrix(); + + GL11.glTranslatef(body.offsetX * (float) px, body.offsetY * (float) px, body.offsetZ * (float) px); + GL11.glTranslatef(body.rotationPointX * (float) px, body.rotationPointY * (float) px, body.rotationPointZ * (float) px); + + if(body.rotateAngleZ != 0.0F) { + GL11.glRotatef(body.rotateAngleZ * (180F / (float) Math.PI), 0.0F, 0.0F, 1.0F); + } + + if(body.rotateAngleY != 0.0F) { + GL11.glRotatef(body.rotateAngleY * (180F / (float) Math.PI), 0.0F, 1.0F, 0.0F); + } + + if(body.rotateAngleX != 0.0F) { + GL11.glRotatef(body.rotateAngleX * (180F / (float) Math.PI), 1.0F, 0.0F, 0.0F); + } + + if(this.type == 0 && entity.onGround) { + rot = 20; + rot2 = 160; + } + + if(this.type != 0) { + rot = 0; + rot2 = 10; + + if(entity.onGround) { + rot = 30; + rot2 = -30; + } else if(entity.motionY < -0.1) { + rot = 0; + rot2 = 10; + } else { + rot = 30; + rot2 = 20; + } + } + + GL11.glTranslated(0, -2 * px, 0); + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPushMatrix(); + + GL11.glRotated(-inwardAngle, 0, 1, 0); + + GL11.glTranslated(pivotSideOffset * px, pivotFrontOffset * px, pivotZOffset * px); + GL11.glRotated(rot * 0.5, 0, 1, 0); + GL11.glRotated(rot + 5, 0, 0, 1); + GL11.glRotated(45, 1, 0, 0); + GL11.glTranslated(-pivotSideOffset * px, -pivotFrontOffset * px, -pivotZOffset * px); + + GL11.glTranslated(pivotSideOffset * px, pivotFrontOffset * px, pivotZOffset * px); + GL11.glRotated(rot, 0, 0, 1); + GL11.glTranslated(-pivotSideOffset * px, -pivotFrontOffset * px, -pivotZOffset * px); + wingLB.render(par7); + + GL11.glTranslated(tipSideOffset * px, pivotFrontOffset * px, tipZOffset * px); + GL11.glRotated(rot2, 0, 1, 0); + if(doesRotateZ()) + GL11.glRotated(rot2 * 0.25 + 5, 0, 0, 1); + GL11.glTranslated(-tipSideOffset * px, -pivotFrontOffset * px, -tipZOffset * px); + wingLT.render(par7); + + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + + GL11.glRotated(inwardAngle, 0, 1, 0); + + GL11.glTranslated(-pivotSideOffset * px, pivotFrontOffset * px, pivotZOffset * px); + GL11.glRotated(-rot * 0.5, 0, 1, 0); + GL11.glRotated(-rot - 5, 0, 0, 1); + GL11.glRotated(45, 1, 0, 0); + GL11.glTranslated(pivotSideOffset * px, -pivotFrontOffset * px, -pivotZOffset * px); + + GL11.glTranslated(-pivotSideOffset * px, pivotFrontOffset * px, pivotZOffset * px); + GL11.glRotated(-rot, 0, 0, 1); + GL11.glTranslated(pivotSideOffset * px, -pivotFrontOffset * px, -pivotZOffset * px); + wingRB.render(par7); + + GL11.glTranslated(-tipSideOffset * px, pivotFrontOffset * px, tipZOffset * px); + GL11.glRotated(-rot2, 0, 1, 0); + if(doesRotateZ()) + GL11.glRotated(-rot2 * 0.25 - 5, 0, 0, 1); + GL11.glTranslated(tipSideOffset * px, -pivotFrontOffset * px, -tipZOffset * px); + wingRT.render(par7); + + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + + GL11.glPopMatrix(); + + GL11.glPopMatrix(); + } + + protected boolean doesRotateZ() { + return true; + } + + protected ResourceLocation getTexture() { + return ResourceManager.wings_murk; + } +} diff --git a/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java b/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java index 0c718925e..8ef2acd96 100644 --- a/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java +++ b/src/main/java/com/hbm/render/util/RenderAccessoryUtility.java @@ -3,9 +3,14 @@ package com.hbm.render.util; import com.hbm.lib.Library; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; +import com.hbm.render.model.ModelArmorSolstice; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.RenderPlayerEvent; public class RenderAccessoryUtility { @@ -117,5 +122,26 @@ public class RenderAccessoryUtility { return null; } + + private static ModelBiped wingModel; + public static void renderSol(RenderPlayerEvent.SetArmorModel event) { + if(wingModel == null) + wingModel = new ModelArmorSolstice(); + + RenderPlayer renderer = event.renderer; + ModelBiped model = renderer.modelArmor; + EntityPlayer player = event.entityPlayer; + + wingModel.isSneak = model.isSneak; + + float interp = event.partialRenderTick; + float yawHead = player.prevRotationYawHead + (player.rotationYawHead - player.prevRotationYawHead) * interp; + float yawOffset = player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * interp; + float yaw = yawHead - yawOffset; + float yawWrapped = MathHelper.wrapAngleTo180_float(yawHead - yawOffset); + float pitch = player.rotationPitch; + + wingModel.render(event.entityPlayer, 0.0F, 0.0F, yawWrapped, yaw, pitch, 0.0625F); + } } diff --git a/src/main/java/com/hbm/util/ArmorUtil.java b/src/main/java/com/hbm/util/ArmorUtil.java index f5aa58e22..35411724f 100644 --- a/src/main/java/com/hbm/util/ArmorUtil.java +++ b/src/main/java/com/hbm/util/ArmorUtil.java @@ -107,6 +107,9 @@ public class ArmorUtil { if(checkArmor(player, ModItems.fau_helmet, ModItems.fau_plate, ModItems.fau_legs, ModItems.fau_boots)) return true; + if(checkArmor(player, ModItems.dns_helmet, ModItems.dns_plate, ModItems.dns_legs, ModItems.dns_boots)) + return true; + if(player.isPotionActive(HbmPotion.stability.id)) return true; @@ -228,6 +231,12 @@ public class ArmorUtil { if(checkArmorPiece(player, ModItems.hev_helmet, 3)) { return true; } + if(checkArmorPiece(player, ModItems.fau_helmet, 3)) { + return true; + } + if(checkArmorPiece(player, ModItems.dns_helmet, 3)) { + return true; + } if(checkArmorPiece(player, ModItems.schrabidium_helmet, 3)) { return true; } @@ -257,6 +266,12 @@ public class ArmorUtil { if(checkArmorPiece(player, ModItems.liquidator_helmet, 3)) return true; + + if(checkArmorPiece(player, ModItems.fau_helmet, 3)) + return true; + + if(checkArmorPiece(player, ModItems.dns_helmet, 3)) + return true; if(player.isPotionActive(HbmPotion.mutation)) return true; @@ -308,6 +323,12 @@ public class ArmorUtil { if(checkArmorPiece(player, ModItems.hev_helmet, 3)) { return true; } + if(checkArmorPiece(player, ModItems.fau_helmet, 3)) { + return true; + } + if(checkArmorPiece(player, ModItems.hev_helmet, 3)) { + return true; + } return false; } diff --git a/src/main/java/com/hbm/util/InventoryUtil.java b/src/main/java/com/hbm/util/InventoryUtil.java index 38cee78cc..7c5cb7aa3 100644 --- a/src/main/java/com/hbm/util/InventoryUtil.java +++ b/src/main/java/com/hbm/util/InventoryUtil.java @@ -2,6 +2,7 @@ package com.hbm.util; import java.util.List; +import com.hbm.inventory.AnvilRecipes.AnvilOutput; import com.hbm.inventory.RecipesCommon.AStack; import net.minecraft.entity.player.EntityPlayer; @@ -189,10 +190,89 @@ public class InventoryUtil { return stack1.getTagCompound().equals(stack2.getTagCompound()); } - public static boolean doesPlayerHaveAStacks(EntityPlayer player, List stacks) { + /** + * Checks if a player has matching item stacks in his inventory and removes them if so desired + * @param player + * @param stacks the AStacks (comparable or ore-dicted) + * @param shouldRemove whether it should just return true or false or if a successful check should also remove all the items + * @return whether the player has the required item stacks or not + */ + public static boolean doesPlayerHaveAStacks(EntityPlayer player, List stacks, boolean shouldRemove) { - //ItemStack[] inventory TODO + ItemStack[] original = player.inventory.mainInventory; + ItemStack[] inventory = new ItemStack[original.length]; + AStack[] input = new AStack[stacks.size()]; - return false; + //first we copy the inputs into an array because 1. it's easier to deal with and 2. we can dick around with the stack sized with no repercussions + for(int i = 0; i < input.length; i++) { + input[i] = stacks.get(i).copy(); + } + + //then we copy the inventory so we can dick around with it as well without making actual modifications to the player's inventory + for(int i = 0; i < original.length; i++) { + if(original[i] != null) { + inventory[i] = original[i].copy(); + } + } + + //now we go through every ingredient... + for(int i = 0; i < input.length; i++) { + + AStack stack = input[i]; + + //...and compare each ingredient to every stack in the inventory + for(int j = 0; j < inventory.length; j++) { + + ItemStack inv = inventory[j]; + + //we check if it matches but ignore stack size for now + if(stack.matchesRecipe(inv, true)) { + //and NOW we care about the stack size + int size = Math.min(stack.stacksize, inv.stackSize); + stack.stacksize -= size; + inv.stackSize -= size; + + //spent stacks are removed from the equation so that we don't cross ourselves later on + if(stack.stacksize <= 0) { + input[i] = null; + break; + } + + if(inv.stackSize <= 0) { + inventory[j] = null; + System.out.println("da yis"); + } + } + } + } + + for(AStack stack : input) { + if(stack != null) { + return false; + } + } + + if(shouldRemove) { + for(int i = 0; i < original.length; i++) { + + if(inventory[i] != null && inventory[i].stackSize <= 0) + original[i] = null; + else + original[i] = inventory[i]; + } + } + + return true; + } + + public static void giveChanceStacksToPlayer(EntityPlayer player, List stacks) { + + for(AnvilOutput out : stacks) { + if(out.chance == 1.0F || player.getRNG().nextFloat() < out.chance) { + if(!player.inventory.addItemStackToInventory(out.stack.copy())) { + player.dropPlayerItemWithRandomChoice(out.stack.copy(), false); + } + } + } } } diff --git a/src/main/resources/assets/hbm/models/armor/murk.obj b/src/main/resources/assets/hbm/models/armor/murk.obj new file mode 100644 index 000000000..0da01b17d --- /dev/null +++ b/src/main/resources/assets/hbm/models/armor/murk.obj @@ -0,0 +1,1308 @@ +# Blender v2.79 (sub 0) OBJ File: 'kfc_murk.blend' +# www.blender.org +o LeftTip +v 15.000000 5.999999 3.125000 +v 15.000000 3.999998 3.125000 +v 15.000000 5.999999 2.125000 +v 15.000000 3.999998 2.125000 +v 31.000000 5.999993 3.125000 +v 31.000000 4.999993 3.125000 +v 31.000000 5.999993 2.125000 +v 31.000000 4.999993 2.125000 +v 17.000000 5.999998 2.375000 +v 15.000000 5.999999 2.375000 +v 16.500004 18.999998 2.375000 +v 15.500005 18.999998 2.375000 +v 18.000000 5.999998 2.875000 +v 16.000000 5.999998 2.875000 +v 17.500004 17.999996 2.875000 +v 16.500004 17.999998 2.875000 +v 33.183014 12.245183 2.375000 +v 34.049042 11.745183 2.375000 +v 29.000000 5.999994 2.375000 +v 30.732052 4.999993 2.375000 +v 28.812614 5.154757 2.375000 +v 27.000000 5.999994 2.375000 +v 32.374340 13.975988 2.375000 +v 31.468029 14.398607 2.375000 +v 29.782013 5.092012 2.875000 +v 28.000000 5.999994 2.875000 +v 33.195431 12.892562 2.875000 +v 32.304424 13.346552 2.875000 +v 30.209660 15.084529 2.875000 +v 31.136845 14.709923 2.875000 +v 26.000000 5.999995 2.875000 +v 27.854368 5.250781 2.875000 +v 29.061062 15.695757 2.375000 +v 30.000755 15.353736 2.375000 +v 25.000000 5.999995 2.375000 +v 26.879385 5.315954 2.375000 +v 22.969616 5.652699 2.375000 +v 21.000000 5.999997 2.375000 +v 24.474171 17.064812 2.375000 +v 23.489361 17.238461 2.375000 +v 23.956295 5.584172 2.875000 +v 22.000000 5.999996 2.875000 +v 25.754253 16.447750 2.875000 +v 24.776106 16.655663 2.875000 +v 27.694244 16.373161 2.875000 +v 28.650549 16.080790 2.875000 +v 24.000000 5.999995 2.875000 +v 25.912609 5.415252 2.875000 +v 26.459385 16.978731 2.375000 +v 27.425312 16.719913 2.375000 +v 23.000000 5.999996 2.375000 +v 24.931850 5.482357 2.375000 +v 20.992390 5.825685 2.375000 +v 19.000000 5.999997 2.375000 +v 21.496586 17.325502 2.375000 +v 20.500393 17.412659 2.375000 +v 21.985092 5.756258 2.875000 +v 20.000000 5.999997 2.875000 +v 22.829386 16.735199 2.875000 +v 21.836840 16.857069 2.875000 +v 18.883595 16.975847 2.875000 +v 19.882984 16.940948 2.875000 +v 18.000000 5.999998 2.875000 +v 19.998781 5.930198 2.875000 +v 17.500004 17.499996 2.375000 +v 18.500004 17.499996 2.375000 +v 17.000000 5.999998 2.375000 +v 19.000000 5.999997 2.375000 +v 17.000000 5.999998 2.375000 +v 15.000000 5.999999 2.375000 +v 16.500004 18.999998 2.375000 +v 15.500005 18.999998 2.375000 +v 18.000000 5.999998 2.875000 +v 16.000000 5.999998 2.875000 +v 17.500004 17.999996 2.875000 +v 16.500004 17.999998 2.875000 +v 33.183014 12.245183 2.375000 +v 34.049042 11.745183 2.375000 +v 29.000000 5.999994 2.375000 +v 30.732052 4.999993 2.375000 +v 28.812614 5.154757 2.375000 +v 27.000000 5.999994 2.375000 +v 32.374340 13.975988 2.375000 +v 31.468029 14.398607 2.375000 +v 29.782013 5.092012 2.875000 +v 28.000000 5.999994 2.875000 +v 33.195431 12.892562 2.875000 +v 32.304424 13.346552 2.875000 +v 30.209660 15.084529 2.875000 +v 31.136845 14.709923 2.875000 +v 26.000000 5.999995 2.875000 +v 27.854368 5.250781 2.875000 +v 29.061062 15.695757 2.375000 +v 30.000755 15.353736 2.375000 +v 25.000000 5.999995 2.375000 +v 26.879385 5.315954 2.375000 +v 22.969616 5.652699 2.375000 +v 21.000000 5.999997 2.375000 +v 24.474171 17.064812 2.375000 +v 23.489361 17.238461 2.375000 +v 23.956295 5.584172 2.875000 +v 22.000000 5.999996 2.875000 +v 25.754253 16.447750 2.875000 +v 24.776106 16.655663 2.875000 +v 27.694244 16.373161 2.875000 +v 28.650549 16.080790 2.875000 +v 24.000000 5.999995 2.875000 +v 25.912609 5.415252 2.875000 +v 26.459385 16.978731 2.375000 +v 27.425312 16.719913 2.375000 +v 23.000000 5.999996 2.375000 +v 24.931850 5.482357 2.375000 +v 20.992390 5.825685 2.375000 +v 19.000000 5.999997 2.375000 +v 21.496586 17.325502 2.375000 +v 20.500393 17.412659 2.375000 +v 21.985092 5.756258 2.875000 +v 20.000000 5.999997 2.875000 +v 22.829386 16.735199 2.875000 +v 21.836840 16.857069 2.875000 +v 18.883595 16.975847 2.875000 +v 19.882984 16.940948 2.875000 +v 18.000000 5.999998 2.875000 +v 19.998781 5.930198 2.875000 +v 17.500004 17.499996 2.375000 +v 18.500004 17.499996 2.375000 +v 17.000000 5.999998 2.375000 +v 19.000000 5.999997 2.375000 +vt 0.000000 0.400000 +vt 0.058824 0.800000 +vt 0.058824 0.400000 +vt 0.058824 0.800000 +vt 1.000000 0.600000 +vt 0.058824 0.400000 +vt -0.000000 0.400000 +vt 0.058824 0.600000 +vt 0.058824 0.400000 +vt 1.000000 0.600000 +vt 1.000000 0.400000 +vt 0.058824 1.000000 +vt 1.000000 0.800000 +vt 1.000000 0.800000 +vt 0.058824 1.000000 +vt 1.000000 1.000000 +vt 0.823529 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.764706 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.500000 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.617647 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.558824 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.647059 0.100000 +vt 0.058824 -0.000000 +vt 0.676471 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.735294 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.705882 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.705882 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.735294 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.735294 0.100000 +vt 0.058824 -0.000000 +vt 0.705882 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.705882 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.735294 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.823529 0.300000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.764706 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.500000 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.617647 0.100000 +vt 0.617647 0.300000 +vt 0.058824 0.000000 +vt 0.558824 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.647059 0.100000 +vt 0.647059 0.300000 +vt 0.058824 0.400000 +vt 0.676471 0.100000 +vt 0.676471 0.300000 +vt 0.058824 -0.000000 +vt 0.735294 0.300000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.705882 0.300000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.705882 0.300000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.735294 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.735294 0.100000 +vt 0.735294 0.300000 +vt 0.058824 -0.000000 +vt 0.705882 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.705882 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.735294 0.300000 +vt 0.058824 0.400000 +vt -0.000000 0.800000 +vt -0.000000 0.600000 +vt 1.000000 1.000000 +vt 0.823529 0.100000 +vt 0.764706 0.100000 +vt 0.500000 0.100000 +vt 0.617647 0.100000 +vt 0.558824 0.100000 +vt 0.647059 0.300000 +vt 0.676471 0.100000 +vt 0.735294 0.100000 +vt 0.705882 0.100000 +vt 0.705882 0.100000 +vt 0.735294 0.100000 +vt 0.735294 0.300000 +vt 0.705882 0.100000 +vt 0.705882 0.100000 +vt 0.735294 0.100000 +vt 0.823529 0.100000 +vt 0.764706 0.100000 +vt 0.500000 0.100000 +vt 0.058824 0.000000 +vt 0.558824 0.100000 +vt 0.058824 -0.000000 +vt 0.058824 -0.000000 +vt 0.735294 0.100000 +vt 0.705882 0.100000 +vt 0.705882 0.100000 +vt 0.735294 0.100000 +vt 0.058824 -0.000000 +vt 0.705882 0.100000 +vt 0.705882 0.100000 +vt 0.735294 0.100000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0624 -0.9981 0.0000 +s off +f 3/1/1 2/2/1 1/3/1 +f 3/4/2 8/5/2 4/6/2 +f 5/7/3 8/8/3 7/9/3 +f 1/3/4 6/10/4 5/11/4 +f 1/12/5 7/13/5 3/4/5 +f 6/14/6 4/15/6 8/16/6 +f 11/17/4 10/18/4 9/19/4 +f 15/20/4 14/21/4 13/22/4 +f 18/23/4 19/24/4 20/25/4 +f 23/26/4 22/27/4 21/28/4 +f 27/29/4 26/30/4 25/31/4 +f 32/32/4 29/33/4 31/34/4 +f 34/35/4 35/36/4 36/37/4 +f 39/38/4 38/39/4 37/40/4 +f 43/41/4 42/42/4 41/43/4 +f 46/44/4 47/45/4 48/46/4 +f 50/47/4 51/48/4 52/49/4 +f 53/50/4 56/51/4 54/52/4 +f 59/53/4 58/54/4 57/55/4 +f 62/56/4 63/57/4 64/58/4 +f 66/59/4 67/60/4 68/61/4 +f 70/62/2 71/63/2 69/64/2 +f 74/65/2 75/66/2 73/67/2 +f 79/68/2 78/69/2 80/70/2 +f 81/71/2 84/72/2 83/73/2 +f 86/74/2 87/75/2 85/76/2 +f 92/77/2 89/78/2 90/79/2 +f 96/80/2 93/81/2 94/82/2 +f 98/83/2 99/84/2 97/85/2 +f 102/86/2 103/87/2 101/88/2 +f 107/89/2 106/90/2 108/91/2 +f 111/92/2 110/93/2 112/94/2 +f 113/95/2 116/96/2 115/97/2 +f 118/98/2 119/99/2 117/100/2 +f 123/101/2 122/102/2 124/103/2 +f 127/104/2 126/105/2 128/106/2 +f 3/1/1 4/107/1 2/2/1 +f 3/4/2 7/13/2 8/5/2 +f 5/7/3 6/108/3 8/8/3 +f 1/3/4 2/2/4 6/10/4 +f 1/12/5 5/109/5 7/13/5 +f 6/14/6 2/2/6 4/15/6 +f 11/17/4 12/110/4 10/18/4 +f 15/20/4 16/111/4 14/21/4 +f 18/23/4 17/112/4 19/24/4 +f 23/26/4 24/113/4 22/27/4 +f 27/29/4 28/114/4 26/30/4 +f 32/32/4 30/115/4 29/33/4 +f 34/35/4 33/116/4 35/36/4 +f 39/38/4 40/117/4 38/39/4 +f 43/41/4 44/118/4 42/42/4 +f 46/44/4 45/119/4 47/45/4 +f 50/47/4 49/120/4 51/48/4 +f 53/50/4 55/121/4 56/51/4 +f 59/53/4 60/122/4 58/54/4 +f 62/56/4 61/123/4 63/57/4 +f 66/59/4 65/124/4 67/60/4 +f 70/62/2 72/125/2 71/63/2 +f 74/65/2 76/126/2 75/66/2 +f 79/68/2 77/127/2 78/69/2 +f 81/71/2 82/128/2 84/72/2 +f 86/74/2 88/129/2 87/75/2 +f 92/77/2 91/130/2 89/78/2 +f 96/80/2 95/131/2 93/81/2 +f 98/83/2 100/132/2 99/84/2 +f 102/86/2 104/133/2 103/87/2 +f 107/89/2 105/134/2 106/90/2 +f 111/92/2 109/135/2 110/93/2 +f 113/95/2 114/136/2 116/96/2 +f 118/98/2 120/137/2 119/99/2 +f 123/101/2 121/138/2 122/102/2 +f 127/104/2 125/139/2 126/105/2 +o LeftBase +v 1.000000 6.000000 3.000000 +v 0.999999 4.000000 3.000000 +v 1.000000 6.000000 2.000000 +v 0.999999 4.000000 2.000000 +v 17.000000 5.999995 3.000000 +v 17.000000 3.999995 3.000000 +v 17.000000 5.999995 2.000000 +v 17.000000 3.999995 2.000000 +v 3.267949 5.000000 2.250000 +v 5.000000 5.999999 2.250000 +v 2.700962 6.982050 2.250000 +v 3.566988 7.482050 2.250000 +v 4.217987 5.092018 2.750000 +v 6.000000 5.999999 2.750000 +v 3.301519 7.992033 2.750000 +v 4.192526 8.446024 2.750000 +v 5.187384 5.154762 2.250000 +v 7.000000 5.999999 2.250000 +v 3.950066 8.991302 2.250000 +v 4.856374 9.413921 2.250000 +v 6.145632 5.250785 2.750000 +v 8.000000 5.999998 2.750000 +v 4.736193 10.074009 2.750000 +v 5.663376 10.448615 2.750000 +v 7.120615 5.315958 2.250000 +v 9.000000 5.999998 2.250000 +v 5.538342 11.125125 2.250000 +v 6.478034 11.467144 2.250000 +v 8.087390 5.415255 2.750000 +v 10.000000 5.999997 2.750000 +v 6.518943 12.255575 2.750000 +v 7.475248 12.547946 2.750000 +v 9.068148 5.482359 2.250000 +v 11.000000 5.999997 2.250000 +v 7.480561 13.339176 2.250000 +v 8.446487 13.597996 2.250000 +v 10.043705 5.584174 2.750000 +v 12.000000 5.999997 2.750000 +v 8.661575 14.491459 2.750000 +v 9.639724 14.699369 2.750000 +v 11.030384 5.652701 2.250000 +v 13.000000 5.999996 2.250000 +v 9.786309 15.587603 2.250000 +v 10.771118 15.761250 2.250000 +v 12.014908 5.756258 2.750000 +v 14.000000 5.999996 2.750000 +v 11.170622 16.735201 2.750000 +v 12.163168 16.857071 2.750000 +v 13.007610 5.825685 2.250000 +v 15.000000 5.999996 2.250000 +v 12.459843 17.823599 2.250000 +v 13.456038 17.910755 2.250000 +v 14.001219 5.930197 2.750000 +v 16.000000 5.999995 2.750000 +v 14.047224 18.939728 2.750000 +v 15.046616 18.974628 2.750000 +v 15.000000 5.999996 2.250000 +v 17.000000 5.999995 2.250000 +v 15.500002 14.499995 2.250000 +v 16.500002 14.499995 2.250000 +v 3.267949 5.000000 2.250000 +v 5.000000 5.999999 2.250000 +v 2.700962 6.982050 2.250000 +v 3.566988 7.482050 2.250000 +v 4.217987 5.092018 2.750000 +v 6.000000 5.999999 2.750000 +v 3.301519 7.992033 2.750000 +v 4.192526 8.446024 2.750000 +v 5.187384 5.154762 2.250000 +v 7.000000 5.999999 2.250000 +v 3.950066 8.991302 2.250000 +v 4.856374 9.413921 2.250000 +v 6.145632 5.250785 2.750000 +v 8.000000 5.999998 2.750000 +v 4.736193 10.074009 2.750000 +v 5.663376 10.448615 2.750000 +v 7.120615 5.315958 2.250000 +v 9.000000 5.999998 2.250000 +v 5.538342 11.125125 2.250000 +v 6.478034 11.467144 2.250000 +v 8.087390 5.415255 2.750000 +v 10.000000 5.999997 2.750000 +v 6.518943 12.255575 2.750000 +v 7.475248 12.547946 2.750000 +v 9.068148 5.482359 2.250000 +v 11.000000 5.999997 2.250000 +v 7.480561 13.339176 2.250000 +v 8.446487 13.597996 2.250000 +v 10.043705 5.584174 2.750000 +v 12.000000 5.999997 2.750000 +v 8.661575 14.491459 2.750000 +v 9.639724 14.699369 2.750000 +v 11.030384 5.652701 2.250000 +v 13.000000 5.999996 2.250000 +v 9.786309 15.587603 2.250000 +v 10.771118 15.761250 2.250000 +v 12.014908 5.756258 2.750000 +v 14.000000 5.999996 2.750000 +v 11.170622 16.735201 2.750000 +v 12.163168 16.857071 2.750000 +v 13.007610 5.825685 2.250000 +v 15.000000 5.999996 2.250000 +v 12.459843 17.823599 2.250000 +v 13.456038 17.910755 2.250000 +v 14.001219 5.930197 2.750000 +v 16.000000 5.999995 2.750000 +v 14.047224 18.939728 2.750000 +v 15.046616 18.974628 2.750000 +v 15.000000 5.999996 2.250000 +v 17.000000 5.999995 2.250000 +v 15.500002 14.499995 2.250000 +v 16.500002 14.499995 2.250000 +vt 0.000000 0.400000 +vt 0.058824 0.800000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 1.000000 0.800000 +vt 1.000000 0.400000 +vt 0.000000 0.400000 +vt 0.058824 0.800000 +vt 1.000000 0.800000 +vt 1.000000 0.400000 +vt 0.058824 1.000000 +vt 1.000000 0.800000 +vt 0.058824 0.800000 +vt 0.058824 1.000000 +vt 1.000000 1.000000 +vt 0.058824 0.400000 +vt 0.176471 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.000000 +vt 0.235294 0.300000 +vt 0.235294 0.100000 +vt 0.058824 0.400000 +vt 0.294118 0.100000 +vt 0.058824 -0.000000 +vt 0.058824 -0.000000 +vt 0.352941 0.300000 +vt 0.352941 0.100000 +vt 0.058824 0.400000 +vt 0.411765 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.470588 0.100000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.529412 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.588235 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.647059 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.705882 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.764706 0.100000 +vt 0.058824 -0.000000 +vt 0.058824 0.000000 +vt 0.823529 0.300000 +vt 0.823529 0.100000 +vt 0.058824 0.400000 +vt 0.558824 0.100000 +vt 0.058824 0.000000 +vt 0.176471 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.058824 0.000000 +vt 0.235294 0.300000 +vt 0.058824 0.400000 +vt 0.294118 0.100000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.352941 0.100000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.411765 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.470588 0.100000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.529412 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.588235 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.058824 0.000000 +vt 0.647059 0.300000 +vt 0.058824 0.400000 +vt 0.705882 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.764706 0.100000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.823529 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.558824 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.000000 0.800000 +vt 0.000000 0.800000 +vt 1.000000 1.000000 +vt 0.176471 0.300000 +vt 0.058824 0.400000 +vt 0.294118 0.300000 +vt 0.058824 0.400000 +vt 0.411765 0.300000 +vt 0.470588 0.300000 +vt 0.529412 0.300000 +vt 0.588235 0.300000 +vt 0.647059 0.300000 +vt 0.705882 0.300000 +vt 0.764706 0.300000 +vt 0.058824 0.400000 +vt 0.558824 0.300000 +vt 0.176471 0.300000 +vt 0.235294 0.100000 +vt 0.294118 0.300000 +vt 0.352941 0.300000 +vt 0.411765 0.300000 +vt 0.470588 0.300000 +vt 0.529412 0.300000 +vt 0.588235 0.300000 +vt 0.647059 0.100000 +vt 0.705882 0.300000 +vt 0.764706 0.300000 +vt 0.823529 0.300000 +vt 0.558824 0.300000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +s off +f 131/140/7 130/141/7 129/142/7 +f 135/143/8 132/144/8 131/145/8 +f 133/146/9 136/147/9 135/143/9 +f 129/142/10 134/148/10 133/149/10 +f 129/150/11 135/151/11 131/152/11 +f 134/148/12 132/153/12 136/154/12 +f 138/155/10 139/156/10 137/157/10 +f 141/158/10 144/159/10 143/160/10 +f 146/161/10 147/162/10 145/163/10 +f 149/164/10 152/165/10 151/166/10 +f 154/167/10 155/168/10 153/169/10 +f 158/170/10 159/171/10 157/172/10 +f 162/173/10 163/174/10 161/175/10 +f 166/176/10 167/177/10 165/178/10 +f 170/179/10 171/180/10 169/181/10 +f 174/182/10 175/183/10 173/184/10 +f 178/185/10 179/186/10 177/187/10 +f 181/188/10 184/189/10 183/190/10 +f 186/191/10 187/192/10 185/193/10 +f 191/194/8 190/195/8 189/196/8 +f 193/197/8 196/198/8 194/199/8 +f 199/200/8 198/201/8 197/202/8 +f 203/203/8 202/204/8 201/205/8 +f 207/206/8 206/207/8 205/208/8 +f 211/209/8 210/210/8 209/211/8 +f 215/212/8 214/213/8 213/214/8 +f 219/215/8 218/216/8 217/217/8 +f 221/218/8 224/219/8 222/220/8 +f 227/221/8 226/222/8 225/223/8 +f 231/224/8 230/225/8 229/226/8 +f 235/227/8 234/228/8 233/229/8 +f 239/230/8 238/231/8 237/232/8 +f 131/140/7 132/233/7 130/141/7 +f 135/143/8 136/147/8 132/144/8 +f 133/146/9 134/234/9 136/147/9 +f 129/142/10 130/141/10 134/148/10 +f 129/150/11 133/235/11 135/151/11 +f 134/148/12 130/141/12 132/153/12 +f 138/155/10 140/236/10 139/156/10 +f 141/158/10 142/237/10 144/159/10 +f 146/161/10 148/238/10 147/162/10 +f 149/164/10 150/239/10 152/165/10 +f 154/167/10 156/240/10 155/168/10 +f 158/170/10 160/241/10 159/171/10 +f 162/173/10 164/242/10 163/174/10 +f 166/176/10 168/243/10 167/177/10 +f 170/179/10 172/244/10 171/180/10 +f 174/182/10 176/245/10 175/183/10 +f 178/185/10 180/246/10 179/186/10 +f 181/188/10 182/247/10 184/189/10 +f 186/191/10 188/248/10 187/192/10 +f 191/194/8 192/249/8 190/195/8 +f 193/197/8 195/250/8 196/198/8 +f 199/200/8 200/251/8 198/201/8 +f 203/203/8 204/252/8 202/204/8 +f 207/206/8 208/253/8 206/207/8 +f 211/209/8 212/254/8 210/210/8 +f 215/212/8 216/255/8 214/213/8 +f 219/215/8 220/256/8 218/216/8 +f 221/218/8 223/257/8 224/219/8 +f 227/221/8 228/258/8 226/222/8 +f 231/224/8 232/259/8 230/225/8 +f 235/227/8 236/260/8 234/228/8 +f 239/230/8 240/261/8 238/231/8 +o RightBase +v -1.000001 6.000000 3.000000 +v -1.000001 4.000000 3.000000 +v -1.000001 6.000000 2.000000 +v -1.000001 4.000000 2.000000 +v -17.000000 6.000005 3.000000 +v -17.000000 4.000005 3.000000 +v -17.000000 6.000005 2.000000 +v -17.000000 4.000005 2.000000 +v -3.267950 5.000000 2.250000 +v -5.000001 6.000001 2.250000 +v -2.700962 6.982051 2.250000 +v -3.566988 7.482051 2.250000 +v -4.217988 5.092020 2.750000 +v -6.000001 6.000001 2.750000 +v -3.301518 7.992034 2.750000 +v -4.192525 8.446025 2.750000 +v -5.187386 5.154765 2.250000 +v -7.000000 6.000002 2.250000 +v -3.950065 8.991304 2.250000 +v -4.856373 9.413923 2.250000 +v -6.145633 5.250788 2.750000 +v -8.000000 6.000002 2.750000 +v -4.736191 10.074011 2.750000 +v -5.663374 10.448618 2.750000 +v -7.120616 5.315961 2.250000 +v -9.000000 6.000002 2.250000 +v -5.538340 11.125127 2.250000 +v -6.478032 11.467148 2.250000 +v -8.087391 5.415258 2.750000 +v -10.000000 6.000003 2.750000 +v -6.518939 12.255577 2.750000 +v -7.475245 12.547950 2.750000 +v -9.068150 5.482364 2.250000 +v -11.000001 6.000003 2.250000 +v -7.480557 13.339180 2.250000 +v -8.446483 13.598000 2.250000 +v -10.043706 5.584179 2.750000 +v -12.000001 6.000003 2.750000 +v -8.661572 14.491463 2.750000 +v -9.639719 14.699375 2.750000 +v -11.030385 5.652707 2.250000 +v -13.000001 6.000004 2.250000 +v -9.786304 15.587608 2.250000 +v -10.771111 15.761256 2.250000 +v -12.014909 5.756265 2.750000 +v -14.000001 6.000004 2.750000 +v -11.170615 16.735207 2.750000 +v -12.163161 16.857075 2.750000 +v -13.007611 5.825692 2.250000 +v -15.000001 6.000004 2.250000 +v -12.459836 17.823606 2.250000 +v -13.456031 17.910763 2.250000 +v -14.001220 5.930205 2.750000 +v -16.000000 6.000005 2.750000 +v -14.047216 18.939735 2.750000 +v -15.046607 18.974636 2.750000 +v -15.000001 6.000004 2.250000 +v -17.000000 6.000005 2.250000 +v -15.499998 14.500005 2.250000 +v -16.499998 14.500005 2.250000 +v -3.267950 5.000000 2.250000 +v -5.000001 6.000001 2.250000 +v -2.700962 6.982051 2.250000 +v -3.566988 7.482051 2.250000 +v -4.217988 5.092020 2.750000 +v -6.000001 6.000001 2.750000 +v -3.301518 7.992034 2.750000 +v -4.192525 8.446025 2.750000 +v -5.187386 5.154765 2.250000 +v -7.000000 6.000002 2.250000 +v -3.950065 8.991304 2.250000 +v -4.856373 9.413923 2.250000 +v -6.145633 5.250788 2.750000 +v -8.000000 6.000002 2.750000 +v -4.736191 10.074011 2.750000 +v -5.663374 10.448618 2.750000 +v -7.120616 5.315961 2.250000 +v -9.000000 6.000002 2.250000 +v -5.538340 11.125127 2.250000 +v -6.478032 11.467148 2.250000 +v -8.087391 5.415258 2.750000 +v -10.000000 6.000003 2.750000 +v -6.518939 12.255577 2.750000 +v -7.475245 12.547950 2.750000 +v -9.068150 5.482364 2.250000 +v -11.000001 6.000003 2.250000 +v -7.480557 13.339180 2.250000 +v -8.446483 13.598000 2.250000 +v -10.043706 5.584179 2.750000 +v -12.000001 6.000003 2.750000 +v -8.661572 14.491463 2.750000 +v -9.639719 14.699375 2.750000 +v -11.030385 5.652707 2.250000 +v -13.000001 6.000004 2.250000 +v -9.786304 15.587608 2.250000 +v -10.771111 15.761256 2.250000 +v -12.014909 5.756265 2.750000 +v -14.000001 6.000004 2.750000 +v -11.170615 16.735207 2.750000 +v -12.163161 16.857075 2.750000 +v -13.007611 5.825692 2.250000 +v -15.000001 6.000004 2.250000 +v -12.459836 17.823606 2.250000 +v -13.456031 17.910763 2.250000 +v -14.001220 5.930205 2.750000 +v -16.000000 6.000005 2.750000 +v -14.047216 18.939735 2.750000 +v -15.046607 18.974636 2.750000 +v -15.000001 6.000004 2.250000 +v -17.000000 6.000005 2.250000 +v -15.499998 14.500005 2.250000 +v -16.499998 14.500005 2.250000 +vt 0.058824 0.800000 +vt 0.000000 0.400000 +vt 0.058824 0.400000 +vt 1.000000 0.800000 +vt 0.058824 0.400000 +vt 1.000000 0.400000 +vt 0.058824 0.800000 +vt 0.000000 0.400000 +vt 1.000000 0.800000 +vt 1.000000 0.400000 +vt 1.000000 0.800000 +vt 0.058824 1.000000 +vt 0.058824 0.800000 +vt 0.058824 1.000000 +vt 1.000000 1.000000 +vt 0.176471 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.058824 0.000000 +vt 0.235294 0.300000 +vt 0.058824 0.400000 +vt 0.294118 0.100000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.352941 0.100000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.411765 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.470588 0.100000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.529412 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.588235 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.058824 0.000000 +vt 0.647059 0.300000 +vt 0.058824 0.400000 +vt 0.705882 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.764706 0.100000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.823529 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.558824 0.100000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.176471 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.000000 +vt 0.235294 0.300000 +vt 0.235294 0.100000 +vt 0.058824 0.400000 +vt 0.294118 0.100000 +vt 0.058824 -0.000000 +vt 0.058824 -0.000000 +vt 0.352941 0.300000 +vt 0.352941 0.100000 +vt 0.058824 0.400000 +vt 0.411765 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.470588 0.100000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.529412 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.588235 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.647059 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.705882 0.100000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.764706 0.100000 +vt 0.058824 -0.000000 +vt 0.058824 0.000000 +vt 0.823529 0.300000 +vt 0.823529 0.100000 +vt 0.058824 0.400000 +vt 0.558824 0.100000 +vt 0.058824 0.000000 +vt 0.000000 0.800000 +vt 0.000000 0.800000 +vt 1.000000 1.000000 +vt 0.176471 0.300000 +vt 0.235294 0.100000 +vt 0.294118 0.300000 +vt 0.352941 0.300000 +vt 0.411765 0.300000 +vt 0.470588 0.300000 +vt 0.529412 0.300000 +vt 0.588235 0.300000 +vt 0.647059 0.100000 +vt 0.705882 0.300000 +vt 0.764706 0.300000 +vt 0.823529 0.300000 +vt 0.558824 0.300000 +vt 0.176471 0.300000 +vt 0.058824 0.400000 +vt 0.294118 0.300000 +vt 0.058824 0.400000 +vt 0.411765 0.300000 +vt 0.470588 0.300000 +vt 0.529412 0.300000 +vt 0.588235 0.300000 +vt 0.647059 0.300000 +vt 0.705882 0.300000 +vt 0.764706 0.300000 +vt 0.058824 0.400000 +vt 0.558824 0.300000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +s off +f 242/262/13 243/263/13 241/264/13 +f 244/265/14 247/266/14 243/267/14 +f 248/268/15 245/269/15 247/266/15 +f 246/270/16 241/264/16 245/271/16 +f 247/272/17 241/273/17 243/274/17 +f 244/275/18 246/270/18 248/276/18 +f 251/277/16 250/278/16 249/279/16 +f 253/280/16 256/281/16 254/282/16 +f 259/283/16 258/284/16 257/285/16 +f 263/286/16 262/287/16 261/288/16 +f 267/289/16 266/290/16 265/291/16 +f 271/292/16 270/293/16 269/294/16 +f 275/295/16 274/296/16 273/297/16 +f 279/298/16 278/299/16 277/300/16 +f 281/301/16 284/302/16 282/303/16 +f 287/304/16 286/305/16 285/306/16 +f 291/307/16 290/308/16 289/309/16 +f 295/310/16 294/311/16 293/312/16 +f 299/313/16 298/314/16 297/315/16 +f 302/316/14 303/317/14 301/318/14 +f 305/319/14 308/320/14 307/321/14 +f 310/322/14 311/323/14 309/324/14 +f 313/325/14 316/326/14 315/327/14 +f 318/328/14 319/329/14 317/330/14 +f 322/331/14 323/332/14 321/333/14 +f 326/334/14 327/335/14 325/336/14 +f 330/337/14 331/338/14 329/339/14 +f 334/340/14 335/341/14 333/342/14 +f 338/343/14 339/344/14 337/345/14 +f 342/346/14 343/347/14 341/348/14 +f 345/349/14 348/350/14 347/351/14 +f 350/352/14 351/353/14 349/354/14 +f 242/262/13 244/355/13 243/263/13 +f 244/265/14 248/268/14 247/266/14 +f 248/268/15 246/356/15 245/269/15 +f 246/270/16 242/262/16 241/264/16 +f 247/272/17 245/357/17 241/273/17 +f 244/275/18 242/262/18 246/270/18 +f 251/277/16 252/358/16 250/278/16 +f 253/280/16 255/359/16 256/281/16 +f 259/283/16 260/360/16 258/284/16 +f 263/286/16 264/361/16 262/287/16 +f 267/289/16 268/362/16 266/290/16 +f 271/292/16 272/363/16 270/293/16 +f 275/295/16 276/364/16 274/296/16 +f 279/298/16 280/365/16 278/299/16 +f 281/301/16 283/366/16 284/302/16 +f 287/304/16 288/367/16 286/305/16 +f 291/307/16 292/368/16 290/308/16 +f 295/310/16 296/369/16 294/311/16 +f 299/313/16 300/370/16 298/314/16 +f 302/316/14 304/371/14 303/317/14 +f 305/319/14 306/372/14 308/320/14 +f 310/322/14 312/373/14 311/323/14 +f 313/325/14 314/374/14 316/326/14 +f 318/328/14 320/375/14 319/329/14 +f 322/331/14 324/376/14 323/332/14 +f 326/334/14 328/377/14 327/335/14 +f 330/337/14 332/378/14 331/338/14 +f 334/340/14 336/379/14 335/341/14 +f 338/343/14 340/380/14 339/344/14 +f 342/346/14 344/381/14 343/347/14 +f 345/349/14 346/382/14 348/350/14 +f 350/352/14 352/383/14 351/353/14 +o RightTip +v -15.000000 6.000001 3.125000 +v -15.000000 4.000001 3.125000 +v -15.000000 6.000001 2.125000 +v -15.000000 4.000001 2.125000 +v -31.000000 6.000007 3.125000 +v -31.000000 5.000007 3.125000 +v -31.000000 6.000007 2.125000 +v -31.000000 5.000007 2.125000 +v -17.000000 6.000002 2.375000 +v -15.000000 6.000001 2.375000 +v -16.499996 19.000002 2.375000 +v -15.499995 19.000002 2.375000 +v -18.000000 6.000002 2.875000 +v -16.000000 6.000002 2.875000 +v -17.499996 18.000004 2.875000 +v -16.499996 18.000002 2.875000 +v -33.183010 12.245198 2.375000 +v -34.049034 11.745198 2.375000 +v -29.000000 6.000006 2.375000 +v -30.732052 5.000007 2.375000 +v -28.812614 5.154769 2.375000 +v -27.000000 6.000006 2.375000 +v -32.374332 13.976004 2.375000 +v -31.468025 14.398621 2.375000 +v -29.782013 5.092025 2.875000 +v -28.000000 6.000006 2.875000 +v -33.195427 12.892577 2.875000 +v -32.304420 13.346567 2.875000 +v -30.209656 15.084542 2.875000 +v -31.136839 14.709936 2.875000 +v -26.000000 6.000005 2.875000 +v -27.854368 5.250793 2.875000 +v -29.061054 15.695768 2.375000 +v -30.000748 15.353749 2.375000 +v -25.000000 6.000005 2.375000 +v -26.879385 5.315965 2.375000 +v -22.969616 5.652708 2.375000 +v -21.000000 6.000004 2.375000 +v -24.474163 17.064821 2.375000 +v -23.489353 17.238468 2.375000 +v -23.956295 5.584181 2.875000 +v -22.000000 6.000004 2.875000 +v -25.754246 16.447762 2.875000 +v -24.776098 16.655672 2.875000 +v -27.694237 16.373173 2.875000 +v -28.650541 16.080801 2.875000 +v -24.000000 6.000005 2.875000 +v -25.912609 5.415262 2.875000 +v -26.459377 16.978743 2.375000 +v -27.425304 16.719925 2.375000 +v -23.000000 6.000004 2.375000 +v -24.931850 5.482367 2.375000 +v -20.992390 5.825692 2.375000 +v -19.000000 6.000003 2.375000 +v -21.496578 17.325510 2.375000 +v -20.500385 17.412666 2.375000 +v -21.985092 5.756265 2.875000 +v -20.000000 6.000003 2.875000 +v -22.829378 16.735207 2.875000 +v -21.836832 16.857077 2.875000 +v -18.883587 16.975853 2.875000 +v -19.882977 16.940952 2.875000 +v -18.000000 6.000002 2.875000 +v -19.998781 5.930204 2.875000 +v -17.499996 17.500004 2.375000 +v -18.499996 17.500004 2.375000 +v -17.000000 6.000002 2.375000 +v -19.000000 6.000003 2.375000 +v -17.000000 6.000002 2.375000 +v -15.000000 6.000001 2.375000 +v -16.499996 19.000002 2.375000 +v -15.499995 19.000002 2.375000 +v -18.000000 6.000002 2.875000 +v -16.000000 6.000002 2.875000 +v -17.499996 18.000004 2.875000 +v -16.499996 18.000002 2.875000 +v -33.183010 12.245198 2.375000 +v -34.049034 11.745198 2.375000 +v -29.000000 6.000006 2.375000 +v -30.732052 5.000007 2.375000 +v -28.812614 5.154769 2.375000 +v -27.000000 6.000006 2.375000 +v -32.374332 13.976004 2.375000 +v -31.468025 14.398621 2.375000 +v -29.782013 5.092025 2.875000 +v -28.000000 6.000006 2.875000 +v -33.195427 12.892577 2.875000 +v -32.304420 13.346567 2.875000 +v -30.209656 15.084542 2.875000 +v -31.136839 14.709936 2.875000 +v -26.000000 6.000005 2.875000 +v -27.854368 5.250793 2.875000 +v -29.061054 15.695768 2.375000 +v -30.000748 15.353749 2.375000 +v -25.000000 6.000005 2.375000 +v -26.879385 5.315965 2.375000 +v -22.969616 5.652708 2.375000 +v -21.000000 6.000004 2.375000 +v -24.474163 17.064821 2.375000 +v -23.489353 17.238468 2.375000 +v -23.956295 5.584181 2.875000 +v -22.000000 6.000004 2.875000 +v -25.754246 16.447762 2.875000 +v -24.776098 16.655672 2.875000 +v -27.694237 16.373173 2.875000 +v -28.650541 16.080801 2.875000 +v -24.000000 6.000005 2.875000 +v -25.912609 5.415262 2.875000 +v -26.459377 16.978743 2.375000 +v -27.425304 16.719925 2.375000 +v -23.000000 6.000004 2.375000 +v -24.931850 5.482367 2.375000 +v -20.992390 5.825692 2.375000 +v -19.000000 6.000003 2.375000 +v -21.496578 17.325510 2.375000 +v -20.500385 17.412666 2.375000 +v -21.985092 5.756265 2.875000 +v -20.000000 6.000003 2.875000 +v -22.829378 16.735207 2.875000 +v -21.836832 16.857077 2.875000 +v -18.883587 16.975853 2.875000 +v -19.882977 16.940952 2.875000 +v -18.000000 6.000002 2.875000 +v -19.998781 5.930204 2.875000 +v -17.499996 17.500004 2.375000 +v -18.499996 17.500004 2.375000 +v -17.000000 6.000002 2.375000 +v -19.000000 6.000003 2.375000 +vt 0.058824 0.800000 +vt 0.000000 0.400000 +vt 0.058824 0.400000 +vt 0.058824 0.800000 +vt 1.000000 0.600000 +vt 1.000000 0.800000 +vt 0.058824 0.600000 +vt -0.000000 0.400000 +vt 0.058824 0.400000 +vt 1.000000 0.600000 +vt 1.000000 0.400000 +vt 0.058824 1.000000 +vt 0.058824 1.000000 +vt 1.000000 0.800000 +vt 1.000000 1.000000 +vt 0.058824 -0.000000 +vt 0.823529 0.300000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.764706 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.500000 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.617647 0.100000 +vt 0.617647 0.300000 +vt 0.058824 0.000000 +vt 0.558824 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.647059 0.100000 +vt 0.647059 0.300000 +vt 0.058824 0.400000 +vt 0.676471 0.100000 +vt 0.676471 0.300000 +vt 0.058824 -0.000000 +vt 0.735294 0.300000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.705882 0.300000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.705882 0.300000 +vt 0.058824 0.400000 +vt 0.058824 -0.000000 +vt 0.735294 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.735294 0.100000 +vt 0.735294 0.300000 +vt 0.058824 -0.000000 +vt 0.705882 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.705882 0.300000 +vt 0.058824 0.400000 +vt 0.058824 0.000000 +vt 0.735294 0.300000 +vt 0.058824 0.400000 +vt 0.823529 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.764706 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.500000 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.617647 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.558824 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.647059 0.100000 +vt 0.058824 -0.000000 +vt 0.676471 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.735294 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.705882 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.705882 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.735294 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.058824 0.400000 +vt 0.735294 0.100000 +vt 0.058824 -0.000000 +vt 0.705882 0.300000 +vt 0.058824 -0.000000 +vt 0.058824 0.400000 +vt 0.705882 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt 0.735294 0.300000 +vt 0.058824 0.000000 +vt 0.058824 0.400000 +vt -0.000000 0.800000 +vt 0.058824 0.400000 +vt -0.000000 0.600000 +vt 1.000000 1.000000 +vt 0.823529 0.100000 +vt 0.764706 0.100000 +vt 0.500000 0.100000 +vt 0.058824 0.000000 +vt 0.558824 0.100000 +vt 0.058824 -0.000000 +vt 0.058824 -0.000000 +vt 0.735294 0.100000 +vt 0.705882 0.100000 +vt 0.705882 0.100000 +vt 0.735294 0.100000 +vt 0.058824 -0.000000 +vt 0.705882 0.100000 +vt 0.705882 0.100000 +vt 0.735294 0.100000 +vt 0.823529 0.100000 +vt 0.764706 0.100000 +vt 0.500000 0.100000 +vt 0.617647 0.100000 +vt 0.558824 0.100000 +vt 0.647059 0.300000 +vt 0.676471 0.100000 +vt 0.735294 0.100000 +vt 0.705882 0.100000 +vt 0.705882 0.100000 +vt 0.735294 0.100000 +vt 0.735294 0.300000 +vt 0.705882 0.100000 +vt 0.705882 0.100000 +vt 0.735294 0.100000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -0.0624 -0.9981 0.0000 +s off +f 354/384/19 355/385/19 353/386/19 +f 355/387/20 360/388/20 359/389/20 +f 360/390/21 357/391/21 359/392/21 +f 358/393/22 353/386/22 357/394/22 +f 359/389/23 353/395/23 355/387/23 +f 356/396/24 358/397/24 360/398/24 +f 362/399/22 363/400/22 361/401/22 +f 366/402/22 367/403/22 365/404/22 +f 371/405/22 370/406/22 372/407/22 +f 373/408/22 376/409/22 375/410/22 +f 378/411/22 379/412/22 377/413/22 +f 384/414/22 381/415/22 382/416/22 +f 388/417/22 385/418/22 386/419/22 +f 390/420/22 391/421/22 389/422/22 +f 394/423/22 395/424/22 393/425/22 +f 399/426/22 398/427/22 400/428/22 +f 403/429/22 402/430/22 404/431/22 +f 405/432/22 408/433/22 407/434/22 +f 410/435/22 411/436/22 409/437/22 +f 415/438/22 414/439/22 416/440/22 +f 419/441/22 418/442/22 420/443/22 +f 423/444/20 422/445/20 421/446/20 +f 427/447/20 426/448/20 425/449/20 +f 430/450/20 431/451/20 432/452/20 +f 435/453/20 434/454/20 433/455/20 +f 439/456/20 438/457/20 437/458/20 +f 444/459/20 441/460/20 443/461/20 +f 446/462/20 447/463/20 448/464/20 +f 451/465/20 450/466/20 449/467/20 +f 455/468/20 454/469/20 453/470/20 +f 458/471/20 459/472/20 460/473/20 +f 462/474/20 463/475/20 464/476/20 +f 465/477/20 468/478/20 466/479/20 +f 471/480/20 470/481/20 469/482/20 +f 474/483/20 475/484/20 476/485/20 +f 478/486/20 479/487/20 480/488/20 +f 354/384/19 356/489/19 355/385/19 +f 355/387/20 356/490/20 360/388/20 +f 360/390/21 358/491/21 357/391/21 +f 358/393/22 354/384/22 353/386/22 +f 359/389/23 357/492/23 353/395/23 +f 356/396/24 354/384/24 358/397/24 +f 362/399/22 364/493/22 363/400/22 +f 366/402/22 368/494/22 367/403/22 +f 371/405/22 369/495/22 370/406/22 +f 373/408/22 374/496/22 376/409/22 +f 378/411/22 380/497/22 379/412/22 +f 384/414/22 383/498/22 381/415/22 +f 388/417/22 387/499/22 385/418/22 +f 390/420/22 392/500/22 391/421/22 +f 394/423/22 396/501/22 395/424/22 +f 399/426/22 397/502/22 398/427/22 +f 403/429/22 401/503/22 402/430/22 +f 405/432/22 406/504/22 408/433/22 +f 410/435/22 412/505/22 411/436/22 +f 415/438/22 413/506/22 414/439/22 +f 419/441/22 417/507/22 418/442/22 +f 423/444/20 424/508/20 422/445/20 +f 427/447/20 428/509/20 426/448/20 +f 430/450/20 429/510/20 431/451/20 +f 435/453/20 436/511/20 434/454/20 +f 439/456/20 440/512/20 438/457/20 +f 444/459/20 442/513/20 441/460/20 +f 446/462/20 445/514/20 447/463/20 +f 451/465/20 452/515/20 450/466/20 +f 455/468/20 456/516/20 454/469/20 +f 458/471/20 457/517/20 459/472/20 +f 462/474/20 461/518/20 463/475/20 +f 465/477/20 467/519/20 468/478/20 +f 471/480/20 472/520/20 470/481/20 +f 474/483/20 473/521/20 475/484/20 +f 478/486/20 477/522/20 479/487/20 diff --git a/src/main/resources/assets/hbm/models/armor/solstice.obj b/src/main/resources/assets/hbm/models/armor/solstice.obj new file mode 100644 index 000000000..11fe36888 --- /dev/null +++ b/src/main/resources/assets/hbm/models/armor/solstice.obj @@ -0,0 +1,570 @@ +# Blender v2.79 (sub 0) OBJ File: 'solstice.blend' +# www.blender.org +o WingLB +v 1.000000 5.000000 3.000000 +v 0.999999 3.000000 3.000000 +v 1.000000 5.000000 2.000000 +v 0.999999 3.000000 2.000000 +v 17.000000 4.999995 3.000000 +v 17.000000 2.999995 3.000000 +v 17.000000 4.999995 2.000000 +v 17.000000 2.999995 2.000000 +v 14.999999 4.999996 2.250000 +v 17.000000 4.999995 2.250000 +v 15.500004 18.499996 2.250000 +v 16.500004 18.499996 2.250000 +v 14.999999 4.999996 2.750000 +v 17.000000 4.999995 2.750000 +v 15.500004 18.499996 2.750000 +v 16.500004 18.499996 2.750000 +v 14.292892 4.292889 2.375000 +v 15.707107 5.707102 2.375000 +v 5.100508 14.192387 2.375000 +v 5.807615 14.899494 2.375000 +v 14.292892 4.292889 2.625000 +v 15.707107 5.707102 2.625000 +v 5.100508 14.192387 2.625000 +v 5.807615 14.899494 2.625000 +v 1.000000 5.000000 2.500000 +v 15.999999 4.999995 2.500000 +v 16.000004 17.999996 2.500000 +v 6.000003 13.999999 2.500000 +v 12.000003 14.999997 2.500000 +v 4.000000 7.999999 2.500000 +v 1.000000 5.000000 2.500000 +v 15.999999 4.999995 2.500000 +v 16.000004 17.999996 2.500000 +v 6.000003 13.999999 2.500000 +v 12.000003 14.999997 2.500000 +v 4.000000 7.999999 2.500000 +vt -0.000000 0.818182 +vt 0.057143 0.939394 +vt 0.057143 0.818182 +vt 0.057143 0.818182 +vt 0.971429 0.939394 +vt 0.971429 0.818182 +vt 0.000000 0.818182 +vt 0.057143 0.939394 +vt 0.971429 0.939394 +vt 0.971429 0.818182 +vt 0.057143 1.000000 +vt 0.971429 0.939394 +vt 0.057143 0.939394 +vt 0.057143 1.000000 +vt 0.971429 1.000000 +vt 0.971429 0.000000 +vt 0.885714 0.818182 +vt 1.000000 0.818182 +vt 1.000000 0.818182 +vt 0.914286 0.000000 +vt 0.885714 0.818182 +vt 0.857143 0.000000 +vt 0.885714 0.000000 +vt 0.857143 0.000000 +vt 0.857143 0.818182 +vt 0.000000 1.000000 +vt 0.057143 0.969697 +vt 0.000000 0.969697 +vt 0.971429 0.000000 +vt 0.885714 0.818182 +vt 1.000000 0.818182 +vt 0.885714 0.818182 +vt 0.971429 -0.000000 +vt 0.914286 -0.000000 +vt 0.857143 0.000000 +vt 0.871429 0.818182 +vt 0.871429 0.000000 +vt 0.871429 0.818182 +vt 0.857143 0.000000 +vt 0.857143 0.818182 +vt 0.057143 0.984848 +vt 0.000000 1.000000 +vt 0.057143 1.000000 +vt 0.857143 0.818182 +vt 0.628571 0.212121 +vt 0.171429 0.636364 +vt 0.857143 0.818182 +vt 0.171429 0.636364 +vt 0.628571 0.212121 +vt -0.000000 0.939394 +vt 0.000000 0.939394 +vt 0.971429 1.000000 +vt 0.914286 -0.000000 +vt 0.971429 -0.000000 +vt 0.857143 0.818182 +vt 0.885714 0.000000 +vt 0.057143 1.000000 +vt 0.914286 0.000000 +vt 1.000000 0.818182 +vt 0.857143 0.818182 +vt 0.871429 0.000000 +vt 0.000000 0.984848 +vt 0.000000 0.818182 +vt 0.857143 0.030303 +vt 0.285714 0.272727 +vt 0.857143 0.030303 +vt 0.000000 0.818182 +vt 0.285714 0.272727 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.9993 0.0370 0.0000 +vn -0.9993 0.0370 0.0000 +vn 0.6805 0.7328 0.0000 +vn -0.7328 -0.6805 0.0000 +vn -0.7071 0.7071 0.0000 +s off +f 3/1/1 2/2/1 1/3/1 +f 7/4/2 4/5/2 3/6/2 +f 5/7/3 8/8/3 7/4/3 +f 1/3/4 6/9/4 5/10/4 +f 1/11/5 7/12/5 3/13/5 +f 6/9/6 4/14/6 8/15/6 +f 11/16/2 10/17/2 9/18/2 +f 14/19/4 15/20/4 13/21/4 +f 16/22/7 10/17/7 12/23/7 +f 13/21/8 11/24/8 9/25/8 +f 15/26/5 12/27/5 11/28/5 +f 19/29/2 18/30/2 17/31/2 +f 21/32/4 24/33/4 23/34/4 +f 24/35/9 18/36/9 20/37/9 +f 21/38/10 19/39/10 17/40/10 +f 23/41/11 20/42/11 19/43/11 +f 26/44/4 29/45/4 30/46/4 +f 32/47/2 36/48/2 35/49/2 +f 3/1/1 4/50/1 2/2/1 +f 7/4/2 8/8/2 4/5/2 +f 5/7/3 6/51/3 8/8/3 +f 1/3/4 2/2/4 6/9/4 +f 1/11/5 5/52/5 7/12/5 +f 6/9/6 2/2/6 4/14/6 +f 11/16/2 12/53/2 10/17/2 +f 14/19/4 16/54/4 15/20/4 +f 16/22/7 14/55/7 10/17/7 +f 13/21/8 15/56/8 11/24/8 +f 15/26/5 16/57/5 12/27/5 +f 19/29/2 20/58/2 18/30/2 +f 21/32/4 22/59/4 24/33/4 +f 24/35/9 22/60/9 18/36/9 +f 21/38/10 23/61/10 19/39/10 +f 23/41/11 24/62/11 20/42/11 +f 25/63/4 26/44/4 30/46/4 +f 26/44/4 27/64/4 29/45/4 +f 29/45/4 28/65/4 30/46/4 +f 33/66/2 32/47/2 35/49/2 +f 32/47/2 31/67/2 36/48/2 +f 36/48/2 34/68/2 35/49/2 +o WingLT +v 15.000000 5.000000 3.062500 +v 15.000000 3.000000 3.062500 +v 15.000000 5.000000 2.062500 +v 15.000000 3.000000 2.062500 +v 31.000000 4.999995 3.062500 +v 31.000000 3.999995 3.062500 +v 31.000000 4.999995 2.062500 +v 31.000000 3.999995 2.062500 +v 17.707108 4.292892 2.437500 +v 16.292894 5.707107 2.437500 +v 26.899498 14.192384 2.437500 +v 26.192390 14.899492 2.437500 +v 26.192390 14.899492 2.687500 +v 26.899498 14.192384 2.687500 +v 16.292894 5.707107 2.687500 +v 17.707108 4.292892 2.687500 +v 16.010000 5.010002 2.562500 +v 30.975857 5.009997 2.562500 +v 16.010004 17.980001 2.562500 +v 25.992420 13.991125 2.562500 +v 19.995955 14.990538 2.562500 +v 27.991261 7.994596 2.562500 +v 16.010000 5.010002 2.562500 +v 30.975857 5.009997 2.562500 +v 16.010004 17.980001 2.562500 +v 25.992420 13.991125 2.562500 +v 19.995955 14.990538 2.562500 +v 27.991261 7.994596 2.562500 +vt 0.000000 0.818182 +vt 0.057143 0.939394 +vt 0.057143 0.818182 +vt 0.971429 0.818182 +vt 0.057143 0.878788 +vt 0.971429 0.939394 +vt 0.000000 0.818182 +vt 0.057143 0.818182 +vt 0.971429 0.878788 +vt 0.971429 0.818182 +vt 0.057143 1.000000 +vt 0.971429 0.939394 +vt 0.057143 0.939394 +vt 0.971429 0.939394 +vt 0.057143 1.000000 +vt 0.971429 1.000000 +vt 0.885714 0.818182 +vt 0.971429 -0.000000 +vt 0.914286 -0.000000 +vt 0.057143 0.984848 +vt -0.000000 1.000000 +vt 0.057143 1.000000 +vt 0.871429 0.818182 +vt 0.857143 0.000000 +vt 0.857143 0.818182 +vt 0.000000 1.000000 +vt 0.057143 0.984848 +vt -0.000000 0.984848 +vt 0.857143 -0.000000 +vt 0.871429 0.818182 +vt 0.871429 -0.000000 +vt 0.971429 0.000000 +vt 0.885714 0.818182 +vt 1.000000 0.818182 +vt 0.857143 0.818182 +vt 0.171429 0.636364 +vt 0.628571 0.212121 +vt 0.857143 0.818182 +vt 0.628571 0.212121 +vt 0.171429 0.636364 +vt 0.000000 0.939394 +vt 0.000000 0.878788 +vt 0.971429 1.000000 +vt 1.000000 0.818182 +vt -0.000000 0.984848 +vt 0.871429 0.000000 +vt 0.057143 1.000000 +vt 0.857143 0.818182 +vt 0.914286 0.000000 +vt 0.857143 0.030303 +vt 0.000000 0.818182 +vt 0.285714 0.272727 +vt 0.000000 0.818182 +vt 0.857143 0.030303 +vt 0.285714 0.272727 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0624 -0.9981 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.6805 0.7328 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.7328 -0.6805 0.0000 +s off +f 39/69/12 38/70/12 37/71/12 +f 39/72/13 44/73/13 40/74/13 +f 41/75/14 44/73/14 43/76/14 +f 37/71/15 42/77/15 41/78/15 +f 37/79/16 43/80/16 39/81/16 +f 42/82/17 40/83/17 44/84/17 +f 45/85/13 48/86/13 47/87/13 +f 52/88/18 46/89/18 45/90/18 +f 51/91/19 48/92/19 46/93/19 +f 49/94/20 47/95/20 48/96/20 +f 50/97/21 45/98/21 47/99/21 +f 50/100/15 51/101/15 52/102/15 +f 53/103/15 58/104/15 57/105/15 +f 59/106/13 63/107/13 64/108/13 +f 39/69/12 40/109/12 38/70/12 +f 39/72/13 43/76/13 44/73/13 +f 41/75/14 42/110/14 44/73/14 +f 37/71/15 38/70/15 42/77/15 +f 37/79/16 41/111/16 43/80/16 +f 42/82/17 38/70/17 40/83/17 +f 45/85/13 46/112/13 48/86/13 +f 52/88/18 51/113/18 46/89/18 +f 51/91/19 49/114/19 48/92/19 +f 49/94/20 50/115/20 47/95/20 +f 50/97/21 52/116/21 45/98/21 +f 50/100/15 49/117/15 51/101/15 +f 55/118/15 53/103/15 57/105/15 +f 53/103/15 54/119/15 58/104/15 +f 58/104/15 56/120/15 57/105/15 +f 60/121/13 59/106/13 64/108/13 +f 59/106/13 61/122/13 63/107/13 +f 63/107/13 62/123/13 64/108/13 +o WingRT +v -15.000000 5.000001 3.062500 +v -15.000000 3.000001 3.062500 +v -15.000000 5.000001 2.062500 +v -15.000000 3.000001 2.062500 +v -31.000000 5.000007 3.062500 +v -31.000000 4.000007 3.062500 +v -31.000000 5.000007 2.062500 +v -31.000000 4.000007 2.062500 +v -17.707108 4.292896 2.437500 +v -16.292892 5.707109 2.437500 +v -26.899492 14.192393 2.437500 +v -26.192383 14.899500 2.437500 +v -26.192383 14.899500 2.687500 +v -26.899492 14.192393 2.687500 +v -16.292892 5.707109 2.687500 +v -17.707108 4.292896 2.687500 +v -16.010000 5.010004 2.562500 +v -30.975857 5.010009 2.562500 +v -16.009995 17.980003 2.562500 +v -25.992414 13.991133 2.562500 +v -19.995947 14.990541 2.562500 +v -27.991259 7.994606 2.562500 +v -16.010000 5.010004 2.562500 +v -30.975857 5.010009 2.562500 +v -16.009995 17.980003 2.562500 +v -25.992414 13.991133 2.562500 +v -19.995947 14.990541 2.562500 +v -27.991259 7.994606 2.562500 +vt 0.057143 0.939394 +vt 0.000000 0.818182 +vt 0.057143 0.818182 +vt 0.971429 0.818182 +vt 0.057143 0.878788 +vt 0.057143 0.818182 +vt 0.000000 0.818182 +vt 0.971429 0.878788 +vt 0.971429 0.818182 +vt 0.971429 0.939394 +vt 0.057143 1.000000 +vt 0.057143 0.939394 +vt 0.057143 1.000000 +vt 0.971429 0.939394 +vt 0.971429 1.000000 +vt 0.914286 -0.000000 +vt 1.000000 0.818182 +vt 0.885714 0.818182 +vt -0.000000 1.000000 +vt 0.057143 0.984848 +vt 0.057143 1.000000 +vt 0.857143 0.000000 +vt 0.871429 0.818182 +vt 0.857143 0.818182 +vt 0.057143 0.984848 +vt 0.000000 1.000000 +vt -0.000000 0.984848 +vt 0.871429 0.818182 +vt 0.857143 -0.000000 +vt 0.871429 -0.000000 +vt 1.000000 0.818182 +vt 0.914286 0.000000 +vt 0.971429 0.000000 +vt 0.857143 0.818182 +vt 0.628571 0.212121 +vt 0.171429 0.636364 +vt 0.857143 0.818182 +vt 0.171429 0.636364 +vt 0.628571 0.212121 +vt 0.000000 0.939394 +vt 0.971429 0.939394 +vt 0.000000 0.878788 +vt 0.971429 1.000000 +vt 0.971429 -0.000000 +vt -0.000000 0.984848 +vt 0.871429 0.000000 +vt 0.057143 1.000000 +vt 0.857143 0.818182 +vt 0.885714 0.818182 +vt 0.000000 0.818182 +vt 0.857143 0.030303 +vt 0.285714 0.272727 +vt 0.857143 0.030303 +vt 0.000000 0.818182 +vt 0.285714 0.272727 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -0.0624 -0.9981 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.6805 0.7328 0.0000 +vn -0.7071 0.7071 0.0000 +vn -0.7328 -0.6805 0.0000 +s off +f 66/124/22 67/125/22 65/126/22 +f 67/127/23 72/128/23 71/129/23 +f 72/128/24 69/130/24 71/129/24 +f 70/131/25 65/126/25 69/132/25 +f 71/133/26 65/134/26 67/135/26 +f 68/136/27 70/137/27 72/138/27 +f 75/139/23 74/140/23 73/141/23 +f 74/142/28 80/143/28 73/144/28 +f 76/145/29 79/146/29 74/147/29 +f 75/148/30 77/149/30 76/150/30 +f 73/151/31 78/152/31 75/153/31 +f 80/154/25 77/155/25 78/156/25 +f 81/157/25 85/158/25 86/159/25 +f 87/160/23 92/161/23 91/162/23 +f 66/124/22 68/163/22 67/125/22 +f 67/127/23 68/164/23 72/128/23 +f 72/128/24 70/165/24 69/130/24 +f 70/131/25 66/124/25 65/126/25 +f 71/133/26 69/166/26 65/134/26 +f 68/136/27 66/124/27 70/137/27 +f 75/139/23 76/167/23 74/140/23 +f 74/142/28 79/168/28 80/143/28 +f 76/145/29 77/169/29 79/146/29 +f 75/148/30 78/170/30 77/149/30 +f 73/151/31 80/171/31 78/152/31 +f 80/154/25 79/172/25 77/155/25 +f 82/173/25 81/157/25 86/159/25 +f 81/157/25 83/174/25 85/158/25 +f 85/158/25 84/175/25 86/159/25 +f 89/176/23 87/160/23 91/162/23 +f 87/160/23 88/177/23 92/161/23 +f 92/161/23 90/178/23 91/162/23 +o WingRB +v -1.000001 5.000000 3.000000 +v -1.000001 3.000000 3.000000 +v -1.000001 5.000000 2.000000 +v -1.000001 3.000000 2.000000 +v -17.000000 5.000005 3.000000 +v -17.000000 3.000005 3.000000 +v -17.000000 5.000005 2.000000 +v -17.000000 3.000005 2.000000 +v -15.000001 5.000004 2.250000 +v -17.000000 5.000005 2.250000 +v -15.499996 18.500004 2.250000 +v -16.499996 18.500004 2.250000 +v -15.000001 5.000004 2.750000 +v -17.000000 5.000005 2.750000 +v -15.499996 18.500004 2.750000 +v -16.499996 18.500004 2.750000 +v -14.292894 4.292897 2.375000 +v -15.707107 5.707111 2.375000 +v -5.100502 14.192389 2.375000 +v -5.807610 14.899496 2.375000 +v -14.292894 4.292897 2.625000 +v -15.707107 5.707111 2.625000 +v -5.100502 14.192389 2.625000 +v -5.807610 14.899496 2.625000 +v -1.000001 5.000000 2.500000 +v -16.000000 5.000005 2.500000 +v -15.999996 18.000004 2.500000 +v -5.999998 14.000001 2.500000 +v -11.999997 15.000003 2.500000 +v -4.000000 8.000000 2.500000 +v -1.000001 5.000000 2.500000 +v -16.000000 5.000005 2.500000 +v -15.999996 18.000004 2.500000 +v -5.999998 14.000001 2.500000 +v -11.999997 15.000003 2.500000 +v -4.000000 8.000000 2.500000 +vt 0.057143 0.939394 +vt -0.000000 0.818182 +vt 0.057143 0.818182 +vt 0.971429 0.939394 +vt 0.057143 0.818182 +vt 0.971429 0.818182 +vt 0.057143 0.939394 +vt 0.000000 0.818182 +vt 0.971429 0.939394 +vt 0.971429 0.818182 +vt 0.971429 0.939394 +vt 0.057143 1.000000 +vt 0.057143 0.939394 +vt 0.057143 1.000000 +vt 0.971429 1.000000 +vt 0.885714 0.818182 +vt 0.971429 0.000000 +vt 1.000000 0.818182 +vt 0.914286 0.000000 +vt 1.000000 0.818182 +vt 0.885714 0.818182 +vt 0.857143 0.000000 +vt 0.885714 0.000000 +vt 0.857143 0.000000 +vt 0.857143 0.818182 +vt 0.057143 0.969697 +vt 0.000000 1.000000 +vt 0.000000 0.969697 +vt 1.000000 0.818182 +vt 0.914286 0.000000 +vt 0.971429 0.000000 +vt 0.914286 -0.000000 +vt 1.000000 0.818182 +vt 0.885714 0.818182 +vt 0.871429 0.818182 +vt 0.857143 0.000000 +vt 0.871429 0.000000 +vt 0.857143 0.000000 +vt 0.871429 0.818182 +vt 0.857143 0.818182 +vt 0.000000 1.000000 +vt 0.057143 0.984848 +vt 0.057143 1.000000 +vt 0.857143 0.818182 +vt 0.171429 0.636364 +vt 0.628571 0.212121 +vt 0.857143 0.818182 +vt 0.628571 0.212121 +vt 0.171429 0.636364 +vt -0.000000 0.939394 +vt 0.000000 0.939394 +vt 0.971429 1.000000 +vt 0.914286 -0.000000 +vt 0.971429 -0.000000 +vt 0.857143 0.818182 +vt 0.885714 0.000000 +vt 0.057143 1.000000 +vt 0.885714 0.818182 +vt 0.971429 -0.000000 +vt 0.857143 0.818182 +vt 0.871429 0.000000 +vt 0.000000 0.984848 +vt 0.857143 0.030303 +vt 0.000000 0.818182 +vt 0.285714 0.272727 +vt 0.000000 0.818182 +vt 0.857143 0.030303 +vt 0.285714 0.272727 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +vn -0.9993 0.0370 0.0000 +vn 0.9993 0.0370 0.0000 +vn -0.6805 0.7328 0.0000 +vn 0.7328 -0.6805 0.0000 +vn 0.7071 0.7071 0.0000 +s off +f 94/179/32 95/180/32 93/181/32 +f 96/182/33 99/183/33 95/184/33 +f 100/185/34 97/186/34 99/183/34 +f 98/187/35 93/181/35 97/188/35 +f 99/189/36 93/190/36 95/191/36 +f 96/192/37 98/187/37 100/193/37 +f 102/194/33 103/195/33 101/196/33 +f 107/197/35 106/198/35 105/199/35 +f 102/194/38 108/200/38 104/201/38 +f 103/202/39 105/199/39 101/203/39 +f 104/204/36 107/205/36 103/206/36 +f 109/207/33 112/208/33 111/209/33 +f 115/210/35 114/211/35 113/212/35 +f 110/213/40 116/214/40 112/215/40 +f 111/216/41 113/217/41 109/218/41 +f 112/219/42 115/220/42 111/221/42 +f 118/222/35 122/223/35 121/224/35 +f 124/225/33 127/226/33 128/227/33 +f 94/179/32 96/228/32 95/180/32 +f 96/182/33 100/185/33 99/183/33 +f 100/185/34 98/229/34 97/186/34 +f 98/187/35 94/179/35 93/181/35 +f 99/189/36 97/230/36 93/190/36 +f 96/192/37 94/179/37 98/187/37 +f 102/194/33 104/231/33 103/195/33 +f 107/197/35 108/232/35 106/198/35 +f 102/194/38 106/233/38 108/200/38 +f 103/202/39 107/234/39 105/199/39 +f 104/204/36 108/235/36 107/205/36 +f 109/207/33 110/236/33 112/208/33 +f 115/210/35 116/237/35 114/211/35 +f 110/213/40 114/238/40 116/214/40 +f 111/216/41 115/239/41 113/217/41 +f 112/219/42 116/240/42 115/220/42 +f 119/241/35 118/222/35 121/224/35 +f 118/222/35 117/242/35 122/223/35 +f 122/223/35 120/243/35 121/224/35 +f 123/244/33 124/225/33 128/227/33 +f 124/225/33 125/245/33 127/226/33 +f 127/226/33 126/246/33 128/227/33 diff --git a/src/main/resources/assets/hbm/textures/armor/wings_murk.png b/src/main/resources/assets/hbm/textures/armor/wings_murk.png new file mode 100644 index 000000000..19321048f Binary files /dev/null and b/src/main/resources/assets/hbm/textures/armor/wings_murk.png differ diff --git a/src/main/resources/assets/hbm/textures/armor/wings_solstice.png b/src/main/resources/assets/hbm/textures/armor/wings_solstice.png new file mode 100644 index 000000000..4b9aa3424 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/armor/wings_solstice.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_anvil.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_anvil.png index cb4b14457..e10e5041b 100755 Binary files a/src/main/resources/assets/hbm/textures/gui/processing/gui_anvil.png and b/src/main/resources/assets/hbm/textures/gui/processing/gui_anvil.png differ diff --git a/src/main/resources/assets/hbm/textures/items/wings_limp.png b/src/main/resources/assets/hbm/textures/items/wings_limp.png new file mode 100644 index 000000000..495cd08ed Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/wings_limp.png differ diff --git a/src/main/resources/assets/hbm/textures/items/wings_murk.png b/src/main/resources/assets/hbm/textures/items/wings_murk.png new file mode 100644 index 000000000..1bc43e1db Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/wings_murk.png differ