From 318e3a03c7f44cdf553ab8826a5c5ce44830ceb6 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Fri, 1 Jan 2016 17:36:50 -0500 Subject: [PATCH] Added Charging rune and associated necessities, such as having the Seer's Sigil detect total charge. --- .../bloodmagic/altar/BloodAltar.java | 86 ++++++++++++++++-- .../WayofTime/bloodmagic/api/Constants.java | 4 + .../bloodmagic/api/altar/AltarUpgrade.java | 7 ++ .../bloodmagic/api/altar/IBloodAltar.java | 8 +- .../bloodmagic/block/BlockBloodRune.java | 2 +- .../bloodmagic/item/sigil/ItemSigilSeer.java | 5 +- .../bloodmagic/registry/ModBlocks.java | 15 +-- .../WayofTime/bloodmagic/tile/TileAltar.java | 18 ++++ .../blockstates/BlockBloodRune.json | 5 + .../assets/bloodmagic/lang/en_US.lang | 1 + .../models/block/BlockBloodRune10.json | 6 ++ .../models/item/BlockBloodRune10.json | 10 ++ .../textures/blocks/ChargingRune.png | Bin 0 -> 693 bytes 13 files changed, 145 insertions(+), 22 deletions(-) create mode 100644 src/main/resources/assets/bloodmagic/models/block/BlockBloodRune10.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/BlockBloodRune10.json create mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/ChargingRune.png diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java index bfc2ca92..471a7869 100644 --- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java @@ -62,6 +62,11 @@ public class BloodAltar private int lockdownDuration; private int demonBloodDuration; + private int totalCharge = 0; //TODO save + private int chargingRate = 0; + private int chargingFrequency = 0; + private int maxCharge = 0; + private int cooldownAfterCrafting = 500; private ItemStack result; @@ -181,6 +186,10 @@ public class BloodAltar case 9: upgrades.addAcceleration(); break; + + case 10: + upgrades.addCharging(); + break; } } } @@ -228,6 +237,10 @@ public class BloodAltar accelerationUpgrades = tagCompound.getInteger(Constants.NBT.ALTAR_ACCELERATION_UPGRADES); demonBloodDuration = tagCompound.getInteger(Constants.NBT.ALTAR_DEMON_BLOOD_DURATION); cooldownAfterCrafting = tagCompound.getInteger(Constants.NBT.ALTAR_COOLDOWN_AFTER_CRAFTING); + chargingRate = tagCompound.getInteger(Constants.NBT.ALTAR_CHARGE_RATE); + chargingFrequency = tagCompound.getInteger(Constants.NBT.ALTAR_CHARGE_FREQUENCY); + totalCharge = tagCompound.getInteger(Constants.NBT.ALTAR_TOTAL_CHARGE); + maxCharge = tagCompound.getInteger(Constants.NBT.ALTAR_MAX_CHARGE); } public void writeToNBT(NBTTagCompound tagCompound) @@ -267,6 +280,10 @@ public class BloodAltar tagCompound.setInteger(Constants.NBT.ALTAR_ACCELERATION_UPGRADES, accelerationUpgrades); tagCompound.setInteger(Constants.NBT.ALTAR_DEMON_BLOOD_DURATION, demonBloodDuration); tagCompound.setInteger(Constants.NBT.ALTAR_COOLDOWN_AFTER_CRAFTING, cooldownAfterCrafting); + tagCompound.setInteger(Constants.NBT.ALTAR_CHARGE_RATE, chargingRate); + tagCompound.setInteger(Constants.NBT.ALTAR_CHARGE_FREQUENCY, chargingFrequency); + tagCompound.setInteger(Constants.NBT.ALTAR_TOTAL_CHARGE, totalCharge); + tagCompound.setInteger(Constants.NBT.ALTAR_MAX_CHARGE, maxCharge); } public void startCycle() @@ -276,7 +293,7 @@ public class BloodAltar checkTier(); - if (fluid == null || fluid.amount <= 0) + if ((fluid == null || fluid.amount <= 0) && totalCharge <= 0) return; if (!isActive) @@ -341,6 +358,14 @@ public class BloodAltar this.fluid.amount -= fluidOutputted; } + if (internalCounter % this.getChargingFrequency() == 0 && !this.isActive) + { + int chargeInputted = Math.min(chargingRate, this.fluid.amount); + chargeInputted = Math.min(chargeInputted, maxCharge - totalCharge); + totalCharge += chargeInputted; + this.fluid.amount -= chargeInputted; + } + if (internalCounter % 100 == 0 && (this.isActive || this.cooldownAfterCrafting <= 0)) startCycle(); @@ -372,9 +397,24 @@ public class BloodAltar if (!canBeFilled) { + boolean hasOperated = false; + int stackSize = tileAltar.getStackInSlot(0).stackSize; + + if (totalCharge > 0) + { + System.out.println("Working..."); + System.out.println("Total charge: " + totalCharge); + + int chargeDrained = Math.min(liquidRequired * stackSize - progress, totalCharge); + + totalCharge -= chargeDrained; + progress += chargeDrained; + System.out.println("Progress: " + progress); + + hasOperated = true; + } if (fluid != null && fluid.amount >= 1) { - int stackSize = tileAltar.getStackInSlot(0).stackSize; int liquidDrained = Math.min((int) (altarTier.ordinal() >= 2 ? consumptionRate * (1 + consumptionMultiplier) : consumptionRate), fluid.amount); if (liquidDrained > (liquidRequired * stackSize - progress)) @@ -383,9 +423,21 @@ public class BloodAltar fluid.amount = fluid.amount - liquidDrained; progress += liquidDrained; + hasOperated = true; + if (internalCounter % 4 == 0) world.spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + Math.random() - Math.random(), pos.getY() + Math.random() - Math.random(), pos.getZ() + Math.random() - Math.random(), f1, f2, f3); + } else if (!hasOperated && progress > 0) + { + progress -= (int) (efficiencyMultiplier * drainRate); + + if (internalCounter % 2 == 0) + world.spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + Math.random() - Math.random(), pos.getY() + Math.random() - Math.random(), pos.getZ() + Math.random() - Math.random(), f1, f2, f3); + } + + if (hasOperated) + { if (progress >= liquidRequired * stackSize) { ItemStack result = this.result; @@ -401,12 +453,6 @@ public class BloodAltar this.isActive = false; } - } else if (progress > 0) - { - progress -= (int) (efficiencyMultiplier * drainRate); - - if (internalCounter % 2 == 0) - world.spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + Math.random() - Math.random(), pos.getY() + Math.random() - Math.random(), pos.getZ() + Math.random() - Math.random(), f1, f2, f3); } } else { @@ -461,6 +507,10 @@ public class BloodAltar this.orbCapacityMultiplier = 1; this.dislocationMultiplier = 1; this.accelerationUpgrades = 0; + this.chargingFrequency = 20; + this.chargingRate = 0; + this.maxCharge = 0; + this.totalCharge = 0; return; } else if (!tier.equals(EnumAltarTier.ONE) && upgrade != null) { @@ -473,6 +523,9 @@ public class BloodAltar this.dislocationMultiplier = (float) (Math.pow(1.2, upgrade.getDisplacementCount())); this.orbCapacityMultiplier = (float) (1 + 0.02 * upgrade.getOrbCapacityCount()); this.accelerationUpgrades = upgrade.getAccelerationCount(); + this.chargingFrequency = Math.max(20 - upgrade.getAccelerationCount(), 1); + this.chargingRate = 100 * upgrade.getChargingCount(); + this.maxCharge = (int) (FluidContainerRegistry.BUCKET_VOLUME * Math.max(0.5 * capacityMultiplier, 1) * upgrade.getChargingCount()); } this.capacity = (int) (FluidContainerRegistry.BUCKET_VOLUME * 10 * capacityMultiplier); @@ -484,6 +537,8 @@ public class BloodAltar this.fluidOutput.amount = this.bufferCapacity; if (this.fluidInput.amount > this.bufferCapacity) this.fluidInput.amount = this.bufferCapacity; + if (this.totalCharge > this.maxCharge) + this.totalCharge = this.maxCharge; tileAltar.getWorld().markBlockForUpdate(tileAltar.getPos()); } @@ -640,4 +695,19 @@ public class BloodAltar this.cooldownAfterCrafting = amount; } } + + public int getChargingRate() + { + return chargingRate; + } + + public int getTotalCharge() + { + return totalCharge; + } + + public int getChargingFrequency() + { + return chargingFrequency == 0 ? 1 : chargingFrequency; + } } diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index 6b5791f3..70669c5b 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -51,6 +51,10 @@ public class Constants public static final String ALTAR_ACCELERATION_UPGRADES = "accelerationUpgrades"; public static final String ALTAR_DEMON_BLOOD_DURATION = "demonBloodDuration"; public static final String ALTAR_COOLDOWN_AFTER_CRAFTING = "cooldownAfterCrafting"; + public static final String ALTAR_TOTAL_CHARGE = "totalCharge"; + public static final String ALTAR_MAX_CHARGE = "maxCharge"; + public static final String ALTAR_CHARGE_RATE = "chargeRate"; + public static final String ALTAR_CHARGE_FREQUENCY = "chargeFrequency"; public static final String ALTARMAKER_CURRENT_TIER = "currentTier"; diff --git a/src/main/java/WayofTime/bloodmagic/api/altar/AltarUpgrade.java b/src/main/java/WayofTime/bloodmagic/api/altar/AltarUpgrade.java index f93c953b..faecb757 100644 --- a/src/main/java/WayofTime/bloodmagic/api/altar/AltarUpgrade.java +++ b/src/main/java/WayofTime/bloodmagic/api/altar/AltarUpgrade.java @@ -18,6 +18,7 @@ public class AltarUpgrade private int orbCapacityCount; private int betterCapacityCount; private int accelerationCount; + private int chargingCount; // Adders @@ -74,4 +75,10 @@ public class AltarUpgrade accelerationCount++; return this; } + + public AltarUpgrade addCharging() + { + chargingCount++; + return this; + } } diff --git a/src/main/java/WayofTime/bloodmagic/api/altar/IBloodAltar.java b/src/main/java/WayofTime/bloodmagic/api/altar/IBloodAltar.java index 07e69029..49749d85 100644 --- a/src/main/java/WayofTime/bloodmagic/api/altar/IBloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/api/altar/IBloodAltar.java @@ -22,6 +22,12 @@ public interface IBloodAltar float getConsumptionRate(); + int getChargingRate(); + + int getChargingFrequency(); + + int getTotalCharge(); + int getLiquidRequired(); int getBufferCapacity(); @@ -44,7 +50,7 @@ public interface IBloodAltar * This can only be set while the altar is not active. * * @param cooldown - * - How long the cooldown should last + * - How long the cooldown should last */ void requestPauseAfterCrafting(int cooldown); } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java index d0b856de..8549a368 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java @@ -7,7 +7,7 @@ import net.minecraft.block.material.Material; public class BlockBloodRune extends BlockString { - public static final String[] names = { "blank", "speed", "efficiency", "sacrifice", "selfSacrifice", "displacement", "capacity", "augCapacity", "orb", "acceleration" }; + public static final String[] names = { "blank", "speed", "efficiency", "sacrifice", "selfSacrifice", "displacement", "capacity", "augCapacity", "orb", "acceleration", "charging" }; public BlockBloodRune() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java index 06d3b93f..881b75d4 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSeer.java @@ -53,6 +53,7 @@ public class ItemSigilSeer extends ItemSigilBase implements IAltarReader int tier = altar.getTier().ordinal() + 1; currentEssence = altar.getCurrentBlood(); int capacity = altar.getCapacity(); + int charge = altar.getTotalCharge(); altar.checkTier(); if (tile instanceof IInventory) { @@ -61,10 +62,10 @@ public class ItemSigilSeer extends ItemSigilBase implements IAltarReader int progress = altar.getProgress(); int totalLiquidRequired = altar.getLiquidRequired() * ((IInventory) tile).getStackInSlot(0).stackSize; int consumptionRate = (int) (altar.getConsumptionRate() * (altar.getConsumptionMultiplier() + 1)); - ChatUtil.sendNoSpam(player, TextHelper.localize(tooltipBase + "currentAltarProgress", progress, totalLiquidRequired), TextHelper.localize(tooltipBase + "currentAltarConsumptionRate", consumptionRate), TextHelper.localize(tooltipBase + "currentAltarTier", tier), TextHelper.localize(tooltipBase + "currentEssence", currentEssence), TextHelper.localize(tooltipBase + "currentAltarCapacity", capacity)); + ChatUtil.sendNoSpam(player, TextHelper.localize(tooltipBase + "currentAltarProgress", progress, totalLiquidRequired), TextHelper.localize(tooltipBase + "currentAltarConsumptionRate", consumptionRate), TextHelper.localize(tooltipBase + "currentAltarTier", tier), TextHelper.localize(tooltipBase + "currentEssence", currentEssence), TextHelper.localize(tooltipBase + "currentAltarCapacity", capacity), TextHelper.localize(tooltipBase + "currentCharge", charge)); } else { - ChatUtil.sendNoSpam(player, TextHelper.localize(tooltipBase + "currentAltarTier", tier), TextHelper.localize(tooltipBase + "currentEssence", currentEssence), TextHelper.localize(tooltipBase + "currentAltarCapacity", capacity)); + ChatUtil.sendNoSpam(player, TextHelper.localize(tooltipBase + "currentAltarTier", tier), TextHelper.localize(tooltipBase + "currentEssence", currentEssence), TextHelper.localize(tooltipBase + "currentAltarCapacity", capacity), TextHelper.localize(tooltipBase + "currentCharge", charge)); } } } else diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index b7bcbec1..7ac880f8 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -70,16 +70,11 @@ public class ModBlocks InventoryRenderHelper renderHelper = BloodMagic.proxy.getRenderHelper(); renderHelper.fluidRender(lifeEssence); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 0); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 1); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 2); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 3); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 4); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 5); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 6); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 7); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 8); - renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), 9); + for (int i = 0; i < BlockBloodRune.names.length; i++) + { + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(bloodRune), i); + } + renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualController), 0); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualController), 1); renderHelper.itemRender(InventoryRenderHelper.getItemFromBlock(ritualStone), 0); diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java index dddefaab..c7566794 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java @@ -239,4 +239,22 @@ public class TileAltar extends TileInventory implements IBloodAltar, ITickable, { bloodAltar.setActive(); } + + @Override + public int getChargingRate() + { + return bloodAltar.getChargingRate(); + } + + @Override + public int getTotalCharge() + { + return bloodAltar.getTotalCharge(); + } + + @Override + public int getChargingFrequency() + { + return bloodAltar.getChargingFrequency(); + } } \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockBloodRune.json b/src/main/resources/assets/bloodmagic/blockstates/BlockBloodRune.json index 1a9bf588..f267e034 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/BlockBloodRune.json +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockBloodRune.json @@ -56,6 +56,11 @@ "textures": { "all": "bloodmagic:blocks/AccelerationRune" } + }, + "charging": { + "textures": { + "all": "bloodmagic:blocks/ChargingRune" + } } } } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index be37377f..802ba6c4 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -174,6 +174,7 @@ tooltip.BloodMagic.sigil.seer.currentAltarConsumptionRate=Consumption Rate: %d L tooltip.BloodMagic.sigil.seer.currentAltarTier=Current Tier: %d tooltip.BloodMagic.sigil.seer.currentEssence=Current Essence: %d LP tooltip.BloodMagic.sigil.seer.currentAltarCapacity=Current Capacity: %d LP +tooltip.BloodMagic.sigil.seer.currentCharge=Current Charge: %d tooltip.BloodMagic.sigil.phantomBridge.desc=&oWalking on thin air... tooltip.BloodMagic.sigil.whirlwind.desc=&oBest not to wear a skirt tooltip.BloodMagic.sigil.enderSeverance.desc=&oPutting Endermen in Dire situations! diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockBloodRune10.json b/src/main/resources/assets/bloodmagic/models/block/BlockBloodRune10.json new file mode 100644 index 00000000..ccbe9e63 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockBloodRune10.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "bloodmagic:blocks/ChargingRune" + } +} diff --git a/src/main/resources/assets/bloodmagic/models/item/BlockBloodRune10.json b/src/main/resources/assets/bloodmagic/models/item/BlockBloodRune10.json new file mode 100644 index 00000000..bc553b9d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/BlockBloodRune10.json @@ -0,0 +1,10 @@ +{ + "parent": "bloodmagic:block/BlockBloodRune10", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/ChargingRune.png b/src/main/resources/assets/bloodmagic/textures/blocks/ChargingRune.png new file mode 100644 index 0000000000000000000000000000000000000000..69f8f713696269ee1f82762677936db66b8d1069 GIT binary patch literal 693 zcmV;m0!safP)< z{|`Aib^^x|C2_UlvIk!WGxGt15&!=F8OQPY`T2Z413(DDTD$MN)*1i+plw@bZrgU- zHX_p2+Pm7ety0Q4M?}LgF!Sr{D**I;&&*Rw!FwTuzBldrZmo?mrZhi2J>71%QcB?=t5WK4h)Sta%DQBwlnx;*%Q{V| z);f;UAx0sDwRTxnCFQa#%=Hihfbib$`!3%v5fM?XFbt1f*9j@tH3NXO)>dXB`f@xX=5@_Y zV~FVfDCb&4?79vBLhvz0>6|CpmDY$zwBv?KDF7J9vFkdeR7xp?AcYh{GPC;q>!|yJ?zI3IJ%Wg%H>4)j4O3Mnv5-CZ+l9?ah17%=gtVm&=_{Yt1<$A|i$m b&gb)gc+5&GHlu-0 literal 0 HcmV?d00001