diff options
Diffstat (limited to 'src/main/java')
7 files changed, 130 insertions, 14 deletions
diff --git a/src/main/java/gtPlusPlus/core/block/base/BlockBaseOre.java b/src/main/java/gtPlusPlus/core/block/base/BlockBaseOre.java index 91b49cb7a3..7d2b89d0b4 100644 --- a/src/main/java/gtPlusPlus/core/block/base/BlockBaseOre.java +++ b/src/main/java/gtPlusPlus/core/block/base/BlockBaseOre.java @@ -1,16 +1,24 @@ package gtPlusPlus.core.block.base; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Random; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.GT_Mod; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.Textures; import gregtech.api.interfaces.IIconContainer; @@ -29,6 +37,8 @@ import gtPlusPlus.xmod.gregtech.api.objects.GTPP_RenderedTexture; public class BlockBaseOre extends BasicBlock implements ITexturedBlock { private final Material blockMaterial; + protected static boolean shouldFortune = false; + protected static boolean shouldSilkTouch = false; public BlockBaseOre(final Material material, final BlockTypes blockType) { super( @@ -130,4 +140,78 @@ public class BlockBaseOre extends BasicBlock implements ITexturedBlock { @Override public void registerBlockIcons(IIconRegister p_149651_1_) {} + @Override + public void harvestBlock(World worldIn, EntityPlayer player, int x, int y, int z, int meta) { + if (EnchantmentHelper.getSilkTouchModifier(player)) { + shouldSilkTouch = true; + super.harvestBlock(worldIn, player, x, y, z, meta); + + if (shouldSilkTouch) { + shouldSilkTouch = false; + } + return; + } + + if (!(player instanceof FakePlayer)) { + shouldFortune = true; + } + super.harvestBlock(worldIn, player, x, y, z, meta); + if (shouldFortune) { + shouldFortune = false; + } + } + + @Override + public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) { + ArrayList<ItemStack> drops = new ArrayList<>(); + if (shouldSilkTouch) { + drops.add(ItemUtils.simpleMetaStack(this, metadata, 1)); + } else { + switch (GT_Mod.gregtechproxy.oreDropSystem) { + case Item -> { + drops.add( + ItemUtils.getItemStackOfAmountFromOreDictNoBroken( + "oreRaw" + this.blockMaterial.getLocalizedName(), + 1)); + } + case FortuneItem -> { + // if shouldFortune and isNatural then get fortune drops + // if not shouldFortune or not isNatural then get normal drops + // if not shouldFortune and isNatural then get normal drops + // if shouldFortune and not isNatural then get normal drops + if (shouldFortune && fortune > 0) { + int aMinAmount = 1; + // Max applicable fortune + if (fortune > 3) fortune = 3; + long amount = (long) new Random().nextInt(fortune) + aMinAmount; + for (int i = 0; i < amount; i++) { + drops.add( + ItemUtils.getItemStackOfAmountFromOreDictNoBroken( + "oreRaw" + this.blockMaterial.getLocalizedName(), + 1)); + } + } else { + drops.add( + ItemUtils.getItemStackOfAmountFromOreDictNoBroken( + "oreRaw" + this.blockMaterial.getLocalizedName(), + 1)); + } + } + case UnifiedBlock -> { + // Unified ore + drops.add(ItemUtils.simpleMetaStack(this, metadata, 1)); + } + case PerDimBlock -> { + // Per Dimension ore + drops.add(ItemUtils.simpleMetaStack(this, metadata, 1)); + } + case Block -> { + // Regular ore + drops.add(ItemUtils.simpleMetaStack(this, metadata, 1)); + } + } + } + return drops; + } + } diff --git a/src/main/java/gtPlusPlus/core/item/base/ore/BaseItemRawOre.java b/src/main/java/gtPlusPlus/core/item/base/ore/BaseItemRawOre.java new file mode 100644 index 0000000000..bca44d0045 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/item/base/ore/BaseItemRawOre.java @@ -0,0 +1,10 @@ +package gtPlusPlus.core.item.base.ore; + +import gtPlusPlus.core.material.Material; + +public class BaseItemRawOre extends BaseOreComponent { + + public BaseItemRawOre(final Material material) { + super(material, BaseOreComponent.ComponentTypes.RAWORE); + } +} diff --git a/src/main/java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java b/src/main/java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java index 13c8986a78..eff545871b 100644 --- a/src/main/java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java +++ b/src/main/java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java @@ -71,20 +71,15 @@ public class BaseOreComponent extends Item { aMap = new HashMap<>(); } String aKey = "Invalid"; - if (componentType == ComponentTypes.CRUSHED) { - aKey = OrePrefixes.crushed.name(); - } else if (componentType == ComponentTypes.CRUSHEDCENTRIFUGED) { - aKey = OrePrefixes.crushedCentrifuged.name(); - } else if (componentType == ComponentTypes.CRUSHEDPURIFIED) { - aKey = OrePrefixes.crushedPurified.name(); - } else if (componentType == ComponentTypes.DUST) { - aKey = OrePrefixes.dust.name(); - } else if (componentType == ComponentTypes.DUSTIMPURE) { - aKey = OrePrefixes.dustImpure.name(); - } else if (componentType == ComponentTypes.DUSTPURE) { - aKey = OrePrefixes.dustPure.name(); - } else if (componentType == ComponentTypes.MILLED) { - aKey = OrePrefixes.milled.name(); + switch (componentType) { + case CRUSHED -> aKey = OrePrefixes.crushed.name(); + case CRUSHEDCENTRIFUGED -> aKey = OrePrefixes.crushedCentrifuged.name(); + case CRUSHEDPURIFIED -> aKey = OrePrefixes.crushedPurified.name(); + case DUST -> aKey = OrePrefixes.dust.name(); + case DUSTIMPURE -> aKey = OrePrefixes.dustImpure.name(); + case DUSTPURE -> aKey = OrePrefixes.dustPure.name(); + case MILLED -> aKey = OrePrefixes.milled.name(); + case RAWORE -> aKey = OrePrefixes.rawOre.name(); } ItemStack x = aMap.get(aKey); @@ -241,6 +236,7 @@ public class BaseOreComponent extends Item { CRUSHED("crushed", "Crushed ", " Ore", true), CRUSHEDCENTRIFUGED("crushedCentrifuged", "Centrifuged Crushed ", " Ore", true), CRUSHEDPURIFIED("crushedPurified", "Purified Crushed ", " Ore", true), + RAWORE("oreRaw", "Raw ", " Ore", true), MILLED("milled", "Milled ", " Ore", true); private final String COMPONENT_NAME; diff --git a/src/main/java/gtPlusPlus/core/material/Material.java b/src/main/java/gtPlusPlus/core/material/Material.java index 11ef72f06c..d6598d4d29 100644 --- a/src/main/java/gtPlusPlus/core/material/Material.java +++ b/src/main/java/gtPlusPlus/core/material/Material.java @@ -1191,6 +1191,10 @@ public class Material { return getComponentByPrefix(OrePrefixes.milled, stacksize); } + public final ItemStack getRawOre(final int stacksize) { + return getComponentByPrefix(OrePrefixes.rawOre, stacksize); + } + public final boolean hasSolidForm() { if (ItemUtils .checkForInvalidItems(new ItemStack[] { getDust(1), getBlock(1), getTinyDust(1), getSmallDust(1) })) { diff --git a/src/main/java/gtPlusPlus/core/material/MaterialGenerator.java b/src/main/java/gtPlusPlus/core/material/MaterialGenerator.java index 2e120107c9..3b7881616b 100644 --- a/src/main/java/gtPlusPlus/core/material/MaterialGenerator.java +++ b/src/main/java/gtPlusPlus/core/material/MaterialGenerator.java @@ -27,6 +27,7 @@ import gtPlusPlus.core.item.base.ore.BaseItemCrushedOre; import gtPlusPlus.core.item.base.ore.BaseItemImpureDust; import gtPlusPlus.core.item.base.ore.BaseItemPurifiedCrushedOre; import gtPlusPlus.core.item.base.ore.BaseItemPurifiedDust; +import gtPlusPlus.core.item.base.ore.BaseItemRawOre; import gtPlusPlus.core.item.base.plates.BaseItemPlate; import gtPlusPlus.core.item.base.plates.BaseItemPlateDense; import gtPlusPlus.core.item.base.plates.BaseItemPlateDouble; @@ -357,6 +358,7 @@ public class MaterialGenerator { temp = new BaseItemPurifiedCrushedOre(matInfo); temp = new BaseItemImpureDust(matInfo); temp = new BaseItemPurifiedDust(matInfo); + temp = new BaseItemRawOre(matInfo); Logger.MATERIALS( "Generated all ore components for " + matInfo.getLocalizedName() @@ -398,6 +400,7 @@ public class MaterialGenerator { temp = new BaseItemPurifiedCrushedOre(matInfo); temp = new BaseItemImpureDust(matInfo); temp = new BaseItemPurifiedDust(matInfo); + temp = new BaseItemRawOre(matInfo); Logger.MATERIALS( "Generated all ore & base components for " + matInfo.getLocalizedName() diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluorite.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluorite.java index c8f87d7cb3..7a1404caae 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluorite.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluorite.java @@ -168,6 +168,16 @@ public class RecipeGen_Fluorite extends RecipeGen_Base { tVoltageMultiplier / 2)) { Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate ore to Crushed ore'"); } + // Macerate raw ore to Crushed + if (GT_Values.RA.addPulveriserRecipe( + material.getRawOre(1), + new ItemStack[] { material.getCrushed(2) }, + new int[] { 10000 }, + 20 * 20, + tVoltageMultiplier / 2)) { + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate raw ore to Crushed ore'"); + } + // Macerate Centrifuged to Pure Dust if (GT_Values.RA.addPulveriserRecipe( material.getCrushedCentrifuged(1), diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java index 10c2066997..035f3a4220 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java @@ -181,6 +181,15 @@ public class RecipeGen_Ore extends RecipeGen_Base { tVoltageMultiplier / 2)) { Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate ore to Crushed ore'"); } + // Macerate raw ore to Crushed + if (GT_Values.RA.addPulveriserRecipe( + material.getRawOre(1), + new ItemStack[] { material.getCrushed(2) }, + new int[] { 10000 }, + 20 * 20, + tVoltageMultiplier / 2)) { + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate raw ore to Crushed ore'"); + } // Macerate Crushed to Impure Dust if (GT_Values.RA.addPulveriserRecipe( material.getCrushed(1), |