From e1131bd1e25d5f1ee5d3b728e4e467b8b5bd11a9 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Sun, 21 Jun 2020 22:48:42 +0200 Subject: [PATCH] Rewrote matter cannon ammo registry to be tag based. --- .../features/IMatterCannonAmmoRegistry.java | 13 +- src/main/java/appeng/core/Registration.java | 6 +- .../registries/MatterCannonAmmoRegistry.java | 199 +++++++++--------- 3 files changed, 117 insertions(+), 101 deletions(-) diff --git a/src/api/java/appeng/api/features/IMatterCannonAmmoRegistry.java b/src/api/java/appeng/api/features/IMatterCannonAmmoRegistry.java index b25b5c69c..af14ad404 100644 --- a/src/api/java/appeng/api/features/IMatterCannonAmmoRegistry.java +++ b/src/api/java/appeng/api/features/IMatterCannonAmmoRegistry.java @@ -23,7 +23,9 @@ package appeng.api.features; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; public interface IMatterCannonAmmoRegistry { @@ -34,7 +36,16 @@ public interface IMatterCannonAmmoRegistry { * @param ammo new ammo * @param weight atomic weight */ - void registerAmmo(ItemStack ammo, double weight); + void registerAmmoItem(Item ammo, double weight); + + /** + * register a new ammo, generally speaking this is based off of atomic weight to + * make it easier to guess at + * + * @param ammoTag item tag id + * @param weight atomic weight + */ + void registerAmmoTag(ResourceLocation ammoTag, double weight); /** * get the penetration value for a particular ammo, 0 indicates a non-ammo. diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index ecca84283..ebe4bad8c 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -233,11 +233,7 @@ final class Registration { registries.cell().addCellGuiHandler(new BasicItemCellGuiHandler()); registries.cell().addCellGuiHandler(new BasicFluidCellGuiHandler()); - api.definitions().materials().matterBall().maybeStack(1).ifPresent(ammoStack -> { - final double weight = 32; - - registries.matterCannon().registerAmmo(ammoStack, weight); - }); + registries.matterCannon().registerAmmoItem(api.definitions().materials().matterBall().item(), 32); PartItemPredicate.register(); } diff --git a/src/main/java/appeng/core/features/registries/MatterCannonAmmoRegistry.java b/src/main/java/appeng/core/features/registries/MatterCannonAmmoRegistry.java index 494351d15..930d23c8a 100644 --- a/src/main/java/appeng/core/features/registries/MatterCannonAmmoRegistry.java +++ b/src/main/java/appeng/core/features/registries/MatterCannonAmmoRegistry.java @@ -19,120 +19,129 @@ package appeng.core.features.registries; import java.util.HashMap; +import java.util.IdentityHashMap; +import java.util.Map; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; import appeng.api.features.IMatterCannonAmmoRegistry; +import net.minecraft.util.ResourceLocation; -public class MatterCannonAmmoRegistry implements /* FIXME IOreListener, */ IMatterCannonAmmoRegistry { +public class MatterCannonAmmoRegistry implements IMatterCannonAmmoRegistry { - private final HashMap DamageModifiers = new HashMap<>(); + /** + * Contains a mapping from + */ + private final Map tagDamageModifiers = new HashMap<>(); + + private final Map itemDamageModifiers = new IdentityHashMap<>(); public MatterCannonAmmoRegistry() { - // FIXME OreDictionaryHandler.INSTANCE.observe( this ); - this.registerAmmo(new ItemStack(Items.GOLD_NUGGET), 196.96655); + this.addTagWeight( "forge:nuggets/meatraw", 32 ); + this.addTagWeight( "forge:nuggets/meatcooked", 32 ); + this.addTagWeight( "forge:nuggets/meat", 32 ); + this.addTagWeight( "forge:nuggets/chicken", 32 ); + this.addTagWeight( "forge:nuggets/beef", 32 ); + this.addTagWeight( "forge:nuggets/sheep", 32 ); + this.addTagWeight( "forge:nuggets/fish", 32 ); + + // real world... + this.addTagWeight( "forge:nuggets/lithium", 6.941 ); + this.addTagWeight( "forge:nuggets/beryllium", 9.0122 ); + this.addTagWeight( "forge:nuggets/boron", 10.811 ); + this.addTagWeight( "forge:nuggets/carbon", 12.0107 ); + this.addTagWeight( "forge:nuggets/coal", 12.0107 ); + this.addTagWeight( "forge:nuggets/charcoal", 12.0107 ); + this.addTagWeight( "forge:nuggets/sodium", 22.9897 ); + this.addTagWeight( "forge:nuggets/magnesium", 24.305 ); + this.addTagWeight( "forge:nuggets/aluminum", 26.9815 ); + this.addTagWeight( "forge:nuggets/silicon", 28.0855 ); + this.addTagWeight( "forge:nuggets/phosphorus", 30.9738 ); + this.addTagWeight( "forge:nuggets/sulfur", 32.065 ); + this.addTagWeight( "forge:nuggets/potassium", 39.0983 ); + this.addTagWeight( "forge:nuggets/calcium", 40.078 ); + this.addTagWeight( "forge:nuggets/scandium", 44.9559 ); + this.addTagWeight( "forge:nuggets/titanium", 47.867 ); + this.addTagWeight( "forge:nuggets/vanadium", 50.9415 ); + this.addTagWeight( "forge:nuggets/manganese", 54.938 ); + this.addTagWeight( "forge:nuggets/iron", 55.845 ); + this.addTagWeight( "forge:nuggets/gold", 196.96655 ); + this.addTagWeight( "forge:nuggets/nickel", 58.6934 ); + this.addTagWeight( "forge:nuggets/cobalt", 58.9332 ); + this.addTagWeight( "forge:nuggets/copper", 63.546 ); + this.addTagWeight( "forge:nuggets/zinc", 65.39 ); + this.addTagWeight( "forge:nuggets/gallium", 69.723 ); + this.addTagWeight( "forge:nuggets/germanium", 72.64 ); + this.addTagWeight( "forge:nuggets/bromine", 79.904 ); + this.addTagWeight( "forge:nuggets/krypton", 83.8 ); + this.addTagWeight( "forge:nuggets/rubidium", 85.4678 ); + this.addTagWeight( "forge:nuggets/strontium", 87.62 ); + this.addTagWeight( "forge:nuggets/yttrium", 88.9059 ); + this.addTagWeight( "forge:nuggets/zirconium", 91.224 ); + this.addTagWeight( "forge:nuggets/niobium", 92.9064 ); + this.addTagWeight( "forge:nuggets/technetium", 98 ); + this.addTagWeight( "forge:nuggets/ruthenium", 101.07 ); + this.addTagWeight( "forge:nuggets/rhodium", 102.9055 ); + this.addTagWeight( "forge:nuggets/palladium", 106.42 ); + this.addTagWeight( "forge:nuggets/silver", 107.8682 ); + this.addTagWeight( "forge:nuggets/cadmium", 112.411 ); + this.addTagWeight( "forge:nuggets/indium", 114.818 ); + this.addTagWeight( "forge:nuggets/tin", 118.71 ); + this.addTagWeight( "forge:nuggets/antimony", 121.76 ); + this.addTagWeight( "forge:nuggets/iodine", 126.9045 ); + this.addTagWeight( "forge:nuggets/tellurium", 127.6 ); + this.addTagWeight( "forge:nuggets/xenon", 131.293 ); + this.addTagWeight( "forge:nuggets/cesium", 132.9055 ); + this.addTagWeight( "forge:nuggets/barium", 137.327 ); + this.addTagWeight( "forge:nuggets/lanthanum", 138.9055 ); + this.addTagWeight( "forge:nuggets/cerium", 140.116 ); + this.addTagWeight( "forge:nuggets/tantalum", 180.9479 ); + this.addTagWeight( "forge:nuggets/tungsten", 183.84 ); + this.addTagWeight( "forge:nuggets/osmium", 190.23 ); + this.addTagWeight( "forge:nuggets/iridium", 192.217 ); + this.addTagWeight( "forge:nuggets/platinum", 195.078 ); + this.addTagWeight( "forge:nuggets/lead", 207.2 ); + this.addTagWeight( "forge:nuggets/bismuth", 208.9804 ); + this.addTagWeight( "forge:nuggets/uranium", 238.0289 ); + this.addTagWeight( "forge:nuggets/plutonium", 244 ); + + // TE stuff... + this.addTagWeight( "forge:nuggets/invar", ( 58.6934 + 55.845 + 55.845 ) / 3.0 ); + this.addTagWeight( "forge:nuggets/electrum", ( 107.8682 + 196.96655 ) / 2.0 ); } @Override - public void registerAmmo(final ItemStack ammo, final double weight) { - this.DamageModifiers.put(ammo, weight); + public void registerAmmoItem(final Item ammo, final double weight) { + this.itemDamageModifiers.put(ammo, weight); + } + + @Override + public void registerAmmoTag(final ResourceLocation ammoTag, final double weight) { + this.tagDamageModifiers.put(ammoTag, weight); } @Override public float getPenetration(final ItemStack is) { - for (final ItemStack o : this.DamageModifiers.keySet()) { - if (ItemStack.areItemsEqual(o, is)) { - return this.DamageModifiers.get(o).floatValue(); + // Check for an exact item match first + Item item = is.getItem(); + Double weight = itemDamageModifiers.get(item); + if (weight != null) { + return weight.floatValue(); + } + + // Next, check each item tag + for (ResourceLocation tag : item.getTags()) { + weight = tagDamageModifiers.get(tag); + if (weight != null) { + return weight.floatValue(); } } + return 0; } -// FIXME @Override -// FIXME public void oreRegistered( final String name, final ItemStack item ) -// FIXME { -// FIXME if( !( name.startsWith( "berry" ) || name.startsWith( "nugget" ) ) ) -// FIXME { -// FIXME return; -// FIXME } -// FIXME -// FIXME // addNugget( "Cobble", 18 ); // ? -// FIXME this.considerItem( name, item, "MeatRaw", 32 ); -// FIXME this.considerItem( name, item, "MeatCooked", 32 ); -// FIXME this.considerItem( name, item, "Meat", 32 ); -// FIXME this.considerItem( name, item, "Chicken", 32 ); -// FIXME this.considerItem( name, item, "Beef", 32 ); -// FIXME this.considerItem( name, item, "Sheep", 32 ); -// FIXME this.considerItem( name, item, "Fish", 32 ); -// FIXME -// FIXME // real world... -// FIXME this.considerItem( name, item, "Lithium", 6.941 ); -// FIXME this.considerItem( name, item, "Beryllium", 9.0122 ); -// FIXME this.considerItem( name, item, "Boron", 10.811 ); -// FIXME this.considerItem( name, item, "Carbon", 12.0107 ); -// FIXME this.considerItem( name, item, "Coal", 12.0107 ); -// FIXME this.considerItem( name, item, "Charcoal", 12.0107 ); -// FIXME this.considerItem( name, item, "Sodium", 22.9897 ); -// FIXME this.considerItem( name, item, "Magnesium", 24.305 ); -// FIXME this.considerItem( name, item, "Aluminum", 26.9815 ); -// FIXME this.considerItem( name, item, "SILICON", 28.0855 ); -// FIXME this.considerItem( name, item, "Phosphorus", 30.9738 ); -// FIXME this.considerItem( name, item, "Sulfur", 32.065 ); -// FIXME this.considerItem( name, item, "Potassium", 39.0983 ); -// FIXME this.considerItem( name, item, "Calcium", 40.078 ); -// FIXME this.considerItem( name, item, "Scandium", 44.9559 ); -// FIXME this.considerItem( name, item, "Titanium", 47.867 ); -// FIXME this.considerItem( name, item, "Vanadium", 50.9415 ); -// FIXME this.considerItem( name, item, "Manganese", 54.938 ); -// FIXME this.considerItem( name, item, "Iron", 55.845 ); -// FIXME this.considerItem( name, item, "Nickel", 58.6934 ); -// FIXME this.considerItem( name, item, "Cobalt", 58.9332 ); -// FIXME this.considerItem( name, item, "Copper", 63.546 ); -// FIXME this.considerItem( name, item, "Zinc", 65.39 ); -// FIXME this.considerItem( name, item, "Gallium", 69.723 ); -// FIXME this.considerItem( name, item, "Germanium", 72.64 ); -// FIXME this.considerItem( name, item, "Bromine", 79.904 ); -// FIXME this.considerItem( name, item, "Krypton", 83.8 ); -// FIXME this.considerItem( name, item, "Rubidium", 85.4678 ); -// FIXME this.considerItem( name, item, "Strontium", 87.62 ); -// FIXME this.considerItem( name, item, "Yttrium", 88.9059 ); -// FIXME this.considerItem( name, item, "Zirconiumm", 91.224 ); -// FIXME this.considerItem( name, item, "Niobiumm", 92.9064 ); -// FIXME this.considerItem( name, item, "Technetium", 98 ); -// FIXME this.considerItem( name, item, "Ruthenium", 101.07 ); -// FIXME this.considerItem( name, item, "Rhodium", 102.9055 ); -// FIXME this.considerItem( name, item, "Palladium", 106.42 ); -// FIXME this.considerItem( name, item, "Silver", 107.8682 ); -// FIXME this.considerItem( name, item, "Cadmium", 112.411 ); -// FIXME this.considerItem( name, item, "Indium", 114.818 ); -// FIXME this.considerItem( name, item, "Tin", 118.71 ); -// FIXME this.considerItem( name, item, "Antimony", 121.76 ); -// FIXME this.considerItem( name, item, "Iodine", 126.9045 ); -// FIXME this.considerItem( name, item, "Tellurium", 127.6 ); -// FIXME this.considerItem( name, item, "Xenon", 131.293 ); -// FIXME this.considerItem( name, item, "Cesium", 132.9055 ); -// FIXME this.considerItem( name, item, "Barium", 137.327 ); -// FIXME this.considerItem( name, item, "Lanthanum", 138.9055 ); -// FIXME this.considerItem( name, item, "Cerium", 140.116 ); -// FIXME this.considerItem( name, item, "Tantalum", 180.9479 ); -// FIXME this.considerItem( name, item, "Tungsten", 183.84 ); -// FIXME this.considerItem( name, item, "Osmium", 190.23 ); -// FIXME this.considerItem( name, item, "Iridium", 192.217 ); -// FIXME this.considerItem( name, item, "Platinum", 195.078 ); -// FIXME this.considerItem( name, item, "Lead", 207.2 ); -// FIXME this.considerItem( name, item, "Bismuth", 208.9804 ); -// FIXME this.considerItem( name, item, "Uranium", 238.0289 ); -// FIXME this.considerItem( name, item, "Plutonium", 244 ); -// FIXME -// FIXME // TE stuff... -// FIXME this.considerItem( name, item, "Invar", ( 58.6934 + 55.845 + 55.845 ) / 3.0 ); -// FIXME this.considerItem( name, item, "Electrum", ( 107.8682 + 196.96655 ) / 2.0 ); -// FIXME } - - private void considerItem(final String ore, final ItemStack item, final String name, final double weight) { - if (ore.equals("berry" + name) || ore.equals("nugget" + name)) { - this.registerAmmo(item, weight); - } + private void addTagWeight(String name, final double weight) { + this.registerAmmoTag(new ResourceLocation(name), weight); } }