From 018704f20652a1f638997ebb6034c58be3cd9522 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Sun, 24 Jul 2022 18:27:54 +0200 Subject: [PATCH] Move satellite loot table to registry system to make possible the creation of custom mining satellites via addons :) --- .../hbm/entity/missile/EntityMinerRocket.java | 6 +- .../SatelliteMinerCargoRegistry.java | 82 +++++++++++++++++++ .../machine/TileEntityMachineSatDock.java | 79 ++++-------------- 3 files changed, 99 insertions(+), 68 deletions(-) create mode 100644 src/main/java/com/hbm/saveddata/satellites/SatelliteMinerCargoRegistry.java diff --git a/src/main/java/com/hbm/entity/missile/EntityMinerRocket.java b/src/main/java/com/hbm/entity/missile/EntityMinerRocket.java index b32840bc2..cb8af88ae 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMinerRocket.java +++ b/src/main/java/com/hbm/entity/missile/EntityMinerRocket.java @@ -14,7 +14,7 @@ public class EntityMinerRocket extends Entity { //0 landing, 1 unloading, 2 lifting public int timer = 0; //0 asteroid, 1 moon - public int cargoType = 0; + public String satelliteClassName = "com.hbm.saveddata.satellites.SatelliteMiner"; public EntityMinerRocket(World p_i1582_1_) { super(p_i1582_1_); @@ -79,7 +79,7 @@ public class EntityMinerRocket extends Entity { dataWatcher.updateObject(16, nbt.getInteger("mode")); dataWatcher.updateObject(17, nbt.getInteger("sat")); timer = nbt.getInteger("timer"); - cargoType = nbt.getInteger("type"); + satelliteClassName = nbt.getString("type"); } @Override @@ -87,7 +87,7 @@ public class EntityMinerRocket extends Entity { nbt.setInteger("mode", dataWatcher.getWatchableObjectInt(16)); nbt.setInteger("sat", dataWatcher.getWatchableObjectInt(17)); nbt.setInteger("timer", timer); - nbt.setInteger("type", cargoType); + nbt.setString("type", satelliteClassName); } } diff --git a/src/main/java/com/hbm/saveddata/satellites/SatelliteMinerCargoRegistry.java b/src/main/java/com/hbm/saveddata/satellites/SatelliteMinerCargoRegistry.java new file mode 100644 index 000000000..7caf98f02 --- /dev/null +++ b/src/main/java/com/hbm/saveddata/satellites/SatelliteMinerCargoRegistry.java @@ -0,0 +1,82 @@ +package com.hbm.saveddata.satellites; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.util.WeightedRandomObject; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import java.util.HashMap; + +public class SatelliteMinerCargoRegistry { + private static final HashMap cargo = new HashMap() {{ + put(SatelliteMiner.class.getName(), new WeightedRandomObject[] { + new WeightedRandomObject(new ItemStack(ModItems.powder_aluminium, 3), 10), + new WeightedRandomObject(new ItemStack(ModItems.powder_iron, 3), 10), + new WeightedRandomObject(new ItemStack(ModItems.powder_titanium, 2), 8), + new WeightedRandomObject(new ItemStack(ModItems.crystal_tungsten, 2), 7), + new WeightedRandomObject(new ItemStack(ModItems.powder_coal, 4), 15), + new WeightedRandomObject(new ItemStack(ModItems.powder_uranium, 2), 5), + new WeightedRandomObject(new ItemStack(ModItems.powder_plutonium, 1), 5), + new WeightedRandomObject(new ItemStack(ModItems.powder_thorium, 2), 7), + new WeightedRandomObject(new ItemStack(ModItems.powder_desh_mix, 3), 5), + new WeightedRandomObject(new ItemStack(ModItems.powder_diamond, 2), 7), + new WeightedRandomObject(new ItemStack(Items.redstone, 5), 15), + new WeightedRandomObject(new ItemStack(ModItems.powder_nitan_mix, 2), 5), + new WeightedRandomObject(new ItemStack(ModItems.powder_power, 2), 5), + new WeightedRandomObject(new ItemStack(ModItems.powder_copper, 5), 15), + new WeightedRandomObject(new ItemStack(ModItems.powder_lead, 3), 10), + new WeightedRandomObject(new ItemStack(ModItems.fluorite, 4), 15), + new WeightedRandomObject(new ItemStack(ModItems.powder_lapis, 4), 10), + new WeightedRandomObject(new ItemStack(ModItems.powder_combine_steel, 1), 1), + new WeightedRandomObject(new ItemStack(ModItems.crystal_aluminium, 1), 5), + new WeightedRandomObject(new ItemStack(ModItems.crystal_gold, 1), 5), + new WeightedRandomObject(new ItemStack(ModItems.crystal_phosphorus, 1), 10), + new WeightedRandomObject(new ItemStack(ModBlocks.gravel_diamond, 1), 3), + new WeightedRandomObject(new ItemStack(ModItems.crystal_uranium, 1), 3), + new WeightedRandomObject(new ItemStack(ModItems.crystal_plutonium, 1), 3), + new WeightedRandomObject(new ItemStack(ModItems.crystal_trixite, 1), 1), + new WeightedRandomObject(new ItemStack(ModItems.crystal_starmetal, 1), 1), + new WeightedRandomObject(new ItemStack(ModItems.crystal_lithium, 2), 4) + }); + put(SatelliteLunarMiner.class.getName(), new WeightedRandomObject[] { + new WeightedRandomObject(new ItemStack(ModBlocks.moon_turf, 48), 5), + new WeightedRandomObject(new ItemStack(ModBlocks.moon_turf, 32), 7), + new WeightedRandomObject(new ItemStack(ModBlocks.moon_turf, 16), 5), + new WeightedRandomObject(new ItemStack(ModItems.powder_lithium, 3), 5), + new WeightedRandomObject(new ItemStack(ModItems.powder_iron, 3), 5), + new WeightedRandomObject(new ItemStack(ModItems.crystal_iron, 1), 1), + new WeightedRandomObject(new ItemStack(ModItems.crystal_lithium, 1), 1), + }); + }}; + + /** + * Register cargo for specified satellite object + * @param o - Satellite object + * @param cargo - WeightedRandomObject array with loot + */ + public static void register(Object o, WeightedRandomObject[] cargo) { + SatelliteMinerCargoRegistry.cargo.put(o.getClass().getName(), cargo); + } + + /** + * Register cargo for specified satellite class + * @param c - Satellite class + * @param cargo - WeightedRandomObject array with loot + */ + public static void register(Class c, WeightedRandomObject[] cargo) { + SatelliteMinerCargoRegistry.cargo.put(c.getName(), cargo); + } + + /** + * Get loot by satellite class name + * @param satelliteName - Satellite class name, like com.hbm.saveddata.satellites.SatelliteMiner + * @return - WeightedRandomObject array with loot + */ + public static WeightedRandomObject[] getCargo(String satelliteName) { + if(cargo.containsKey(satelliteName)) { + return cargo.get(satelliteName); + } + return new WeightedRandomObject[0]; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java index 04472437e..497525462 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java @@ -1,24 +1,17 @@ package com.hbm.tileentity.machine; -import java.util.List; -import java.util.Random; - -import com.hbm.blocks.ModBlocks; import com.hbm.entity.missile.EntityMinerRocket; import com.hbm.explosion.ExplosionNukeSmall; -import com.hbm.items.ModItems; import com.hbm.items.machine.ItemSatChip; import com.hbm.saveddata.SatelliteSavedData; import com.hbm.saveddata.satellites.Satellite; -import com.hbm.saveddata.satellites.SatelliteLunarMiner; import com.hbm.saveddata.satellites.SatelliteMiner; +import com.hbm.saveddata.satellites.SatelliteMinerCargoRegistry; import com.hbm.util.WeightedRandomObject; - import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; @@ -28,9 +21,12 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.WeightedRandom; +import java.util.List; +import java.util.Random; + public class TileEntityMachineSatDock extends TileEntity implements ISidedInventory { - private ItemStack slots[]; + private ItemStack[] slots; private static final int[] access = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; @@ -112,7 +108,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent { return false; } - + return true; } @@ -223,9 +219,8 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent rocket.posX = xCoord + 0.5; rocket.posY = 300; rocket.posZ = zCoord + 0.5; - - if(sat instanceof SatelliteLunarMiner) - rocket.cargoType = 1; + + rocket.satelliteClassName = miner.getClass().getName(); rocket.getDataWatcher().updateObject(17, freq); worldObj.spawnEntityInWorld(rocket); @@ -250,7 +245,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent } if(rocket.getDataWatcher().getWatchableObjectInt(16) == 1 && rocket.timer == 50) { - unloadCargo(rocket.cargoType); + unloadCargo(rocket.satelliteClassName); } } } @@ -264,64 +259,18 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent static Random rand = new Random(); - private void unloadCargo(int type) { - + private void unloadCargo(String satelliteClassName) { int items = rand.nextInt(6) + 10; - - WeightedRandomObject[] cargo; - - if(type == 0) - cargo = this.standardCargo; - else - cargo = this.lunarCargo; - + + WeightedRandomObject[] cargo = SatelliteMinerCargoRegistry.getCargo(satelliteClassName); + for(int i = 0; i < items; i++) { - + ItemStack stack = ((WeightedRandomObject)WeightedRandom.getRandomItem(rand, cargo)).asStack(); addToInv(stack); } } - private WeightedRandomObject[] standardCargo = new WeightedRandomObject[] { - new WeightedRandomObject(new ItemStack(ModItems.powder_aluminium, 3), 10), - new WeightedRandomObject(new ItemStack(ModItems.powder_iron, 3), 10), - new WeightedRandomObject(new ItemStack(ModItems.powder_titanium, 2), 8), - new WeightedRandomObject(new ItemStack(ModItems.crystal_tungsten, 2), 7), - new WeightedRandomObject(new ItemStack(ModItems.powder_coal, 4), 15), - new WeightedRandomObject(new ItemStack(ModItems.powder_uranium, 2), 5), - new WeightedRandomObject(new ItemStack(ModItems.powder_plutonium, 1), 5), - new WeightedRandomObject(new ItemStack(ModItems.powder_thorium, 2), 7), - new WeightedRandomObject(new ItemStack(ModItems.powder_desh_mix, 3), 5), - new WeightedRandomObject(new ItemStack(ModItems.powder_diamond, 2), 7), - new WeightedRandomObject(new ItemStack(Items.redstone, 5), 15), - new WeightedRandomObject(new ItemStack(ModItems.powder_nitan_mix, 2), 5), - new WeightedRandomObject(new ItemStack(ModItems.powder_power, 2), 5), - new WeightedRandomObject(new ItemStack(ModItems.powder_copper, 5), 15), - new WeightedRandomObject(new ItemStack(ModItems.powder_lead, 3), 10), - new WeightedRandomObject(new ItemStack(ModItems.fluorite, 4), 15), - new WeightedRandomObject(new ItemStack(ModItems.powder_lapis, 4), 10), - new WeightedRandomObject(new ItemStack(ModItems.powder_combine_steel, 1), 1), - new WeightedRandomObject(new ItemStack(ModItems.crystal_aluminium, 1), 5), - new WeightedRandomObject(new ItemStack(ModItems.crystal_gold, 1), 5), - new WeightedRandomObject(new ItemStack(ModItems.crystal_phosphorus, 1), 10), - new WeightedRandomObject(new ItemStack(ModBlocks.gravel_diamond, 1), 3), - new WeightedRandomObject(new ItemStack(ModItems.crystal_uranium, 1), 3), - new WeightedRandomObject(new ItemStack(ModItems.crystal_plutonium, 1), 3), - new WeightedRandomObject(new ItemStack(ModItems.crystal_trixite, 1), 1), - new WeightedRandomObject(new ItemStack(ModItems.crystal_starmetal, 1), 1), - new WeightedRandomObject(new ItemStack(ModItems.crystal_lithium, 2), 4) - }; - - private WeightedRandomObject[] lunarCargo = new WeightedRandomObject[] { - new WeightedRandomObject(new ItemStack(ModBlocks.moon_turf, 48), 5), - new WeightedRandomObject(new ItemStack(ModBlocks.moon_turf, 32), 7), - new WeightedRandomObject(new ItemStack(ModBlocks.moon_turf, 16), 5), - new WeightedRandomObject(new ItemStack(ModItems.powder_lithium, 3), 5), - new WeightedRandomObject(new ItemStack(ModItems.powder_iron, 3), 5), - new WeightedRandomObject(new ItemStack(ModItems.crystal_iron, 1), 1), - new WeightedRandomObject(new ItemStack(ModItems.crystal_lithium, 1), 1), - }; - private void addToInv(ItemStack stack) { for(int i = 0; i < 15; i++) {