From a574c7f67e9ed294f888ed24c32852dafd616d6c Mon Sep 17 00:00:00 2001 From: Ayutac Date: Thu, 28 Apr 2022 10:52:10 +0200 Subject: [PATCH] Added the muffler upgrade (#2928) * Added flag for ability to play sound. * Added muffler functionality * Added muffler to upgrade advancement * Added muffler model * Added muffler lang entry * Added muffler placeholder texture * Added muffler recipe + toast * Added muffler tooltip --- .../blockentity/MachineBaseBlockEntity.java | 22 ++++++++++++ .../common/recipes/IUpgradeHandler.java | 6 ++++ .../common/recipes/RecipeCrafter.java | 17 +++++++++- .../tier0/block/AbstractBlockBlockEntity.java | 7 +++- .../machine/tier0/block/BlockProcessable.java | 12 ++++++- src/main/java/techreborn/init/TRContent.java | 3 ++ .../assets/techreborn/lang/en_us.json | 2 ++ .../models/item/muffler_upgrade.json | 6 ++++ .../textures/item/upgrade/muffler_upgrade.png | Bin 0 -> 579 bytes .../upgrade/muffler_upgrade.json | 32 ++++++++++++++++++ .../data/techreborn/advancements/upgrade.json | 14 ++++++-- .../upgrade/muffler_upgrade.json | 19 +++++++++++ 12 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/assets/techreborn/models/item/muffler_upgrade.json create mode 100644 src/main/resources/assets/techreborn/textures/item/upgrade/muffler_upgrade.png create mode 100644 src/main/resources/data/techreborn/advancements/recipes/crafting_table/upgrade/muffler_upgrade.json create mode 100644 src/main/resources/data/techreborn/recipes/crafting_table/upgrade/muffler_upgrade.json diff --git a/RebornCore/src/main/java/reborncore/common/blockentity/MachineBaseBlockEntity.java b/RebornCore/src/main/java/reborncore/common/blockentity/MachineBaseBlockEntity.java index 386947c6f..795b7d02a 100644 --- a/RebornCore/src/main/java/reborncore/common/blockentity/MachineBaseBlockEntity.java +++ b/RebornCore/src/main/java/reborncore/common/blockentity/MachineBaseBlockEntity.java @@ -102,6 +102,12 @@ public class MachineBaseBlockEntity extends BlockEntity implements BlockEntityTi * */ double powerMultiplier = 1; + /** + *

+ * This is used to change the sound of the crafting operation. + *

+ */ + boolean muffled = false; public MachineBaseBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); @@ -187,6 +193,7 @@ public class MachineBaseBlockEntity extends BlockEntity implements BlockEntityTi public void resetUpgrades() { resetPowerMultiplier(); resetSpeedMultiplier(); + resetMuffler(); } protected void afterUpgradesApplication() { @@ -356,6 +363,21 @@ public class MachineBaseBlockEntity extends BlockEntity implements BlockEntityTi } } + @Override + public void muffle() { + muffled = true; + } + + @Override + public void resetMuffler() { + muffled = false; + } + + @Override + public boolean isMuffled() { + return muffled; + } + public boolean hasSlotConfig() { return true; } diff --git a/RebornCore/src/main/java/reborncore/common/recipes/IUpgradeHandler.java b/RebornCore/src/main/java/reborncore/common/recipes/IUpgradeHandler.java index f08da4267..a81305bd1 100644 --- a/RebornCore/src/main/java/reborncore/common/recipes/IUpgradeHandler.java +++ b/RebornCore/src/main/java/reborncore/common/recipes/IUpgradeHandler.java @@ -43,4 +43,10 @@ public interface IUpgradeHandler { void addSpeedMultiplier(double amount); + void muffle(); + + void resetMuffler(); + + boolean isMuffled(); + } diff --git a/RebornCore/src/main/java/reborncore/common/recipes/RecipeCrafter.java b/RebornCore/src/main/java/reborncore/common/recipes/RecipeCrafter.java index f7b85598c..2de17a7c9 100644 --- a/RebornCore/src/main/java/reborncore/common/recipes/RecipeCrafter.java +++ b/RebornCore/src/main/java/reborncore/common/recipes/RecipeCrafter.java @@ -187,7 +187,7 @@ public class RecipeCrafter implements IUpgradeHandler { long useRequirement = getEuPerTick(currentRecipe.getPower()); if (energy.tryUseExact(useRequirement)) { currentTickTime++; - if ((currentTickTime == 1 || currentTickTime % 20 == 0 && cachedWorldTime > lastSoundTime+ 10) && soundHandler != null) { + if ((currentTickTime == 1 || currentTickTime % 20 == 0 && cachedWorldTime > lastSoundTime+ 10) && soundHandler != null && !isMuffled()) { lastSoundTime = cachedWorldTime; soundHandler.playSound(false, blockEntity); } @@ -416,4 +416,19 @@ public class RecipeCrafter implements IUpgradeHandler { public void addSpeedMultiplier(double amount) { parentUpgradeHandler.ifPresent(iUpgradeHandler -> iUpgradeHandler.addSpeedMultiplier(amount)); } + + @Override + public void muffle() { + parentUpgradeHandler.ifPresent(IUpgradeHandler::muffle); + } + + @Override + public void resetMuffler() { + parentUpgradeHandler.ifPresent(IUpgradeHandler::resetMuffler); + } + + @Override + public boolean isMuffled() { + return parentUpgradeHandler.map(IUpgradeHandler::isMuffled).orElse(false); + } } diff --git a/src/main/java/techreborn/blockentity/machine/tier0/block/AbstractBlockBlockEntity.java b/src/main/java/techreborn/blockentity/machine/tier0/block/AbstractBlockBlockEntity.java index e0add1b15..50789b585 100644 --- a/src/main/java/techreborn/blockentity/machine/tier0/block/AbstractBlockBlockEntity.java +++ b/src/main/java/techreborn/blockentity/machine/tier0/block/AbstractBlockBlockEntity.java @@ -89,8 +89,13 @@ public class AbstractBlockBlockEntity extends GenericMachineBlockEntity implemen //BlockBreakerProcessable @Override public void playSound() { - if (RecipeCrafter.soundHandler != null) { + if (RecipeCrafter.soundHandler != null && canPlaySound()) { RecipeCrafter.soundHandler.playSound(false, this); } } + + @Override + public boolean canPlaySound() { + return !isMuffled(); + } } diff --git a/src/main/java/techreborn/blockentity/machine/tier0/block/BlockProcessable.java b/src/main/java/techreborn/blockentity/machine/tier0/block/BlockProcessable.java index 9a7f3a7d5..11cdea9e7 100644 --- a/src/main/java/techreborn/blockentity/machine/tier0/block/BlockProcessable.java +++ b/src/main/java/techreborn/blockentity/machine/tier0/block/BlockProcessable.java @@ -23,9 +23,19 @@ public interface BlockProcessable extends IUpgradeHandler, RedstoneConfigurable, */ boolean consumeEnergy(int amount); - /** * Play a sound to the Minecraft world + * + * @see #canPlaySound() */ void playSound(); + + /** + * If a sound can be played. + * + * @see #playSound() + */ + default boolean canPlaySound() { + return true; + } } \ No newline at end of file diff --git a/src/main/java/techreborn/init/TRContent.java b/src/main/java/techreborn/init/TRContent.java index c2a0a6344..932cf5638 100644 --- a/src/main/java/techreborn/init/TRContent.java +++ b/src/main/java/techreborn/init/TRContent.java @@ -1496,6 +1496,9 @@ public class TRContent { if (aesu != null) { aesu.superconductors += TechRebornConfig.superConductorCount; } + }), + MUFFLER((blockEntity, handler, stack) -> { + blockEntity.muffle(); }); public String name; diff --git a/src/main/resources/assets/techreborn/lang/en_us.json b/src/main/resources/assets/techreborn/lang/en_us.json index a31cf9901..4b943368b 100644 --- a/src/main/resources/assets/techreborn/lang/en_us.json +++ b/src/main/resources/assets/techreborn/lang/en_us.json @@ -699,6 +699,7 @@ "item.techreborn.transformer_upgrade": "Transformer Upgrade", "item.techreborn.energy_storage_upgrade": "Energy Storage Upgrade", "item.techreborn.superconductor_upgrade": "Superconductor Upgrade", + "item.techreborn.muffler_upgrade": "Muffler Upgrade", "item.techreborn.bronze_sword": "Bronze Sword", "item.techreborn.bronze_pickaxe": "Bronze Pickaxe", @@ -768,6 +769,7 @@ "techreborn.message.info.item.techreborn.transformer_upgrade": "Increase energy tier", "techreborn.message.info.item.techreborn.energy_storage_upgrade": "Increase energy store", "techreborn.message.info.item.techreborn.superconductor_upgrade": "Increases energy flow rate", + "techreborn.message.info.item.techreborn.muffler_upgrade": "Muffles the machine", "techreborn.message.info.unplaceable_fluid": "Cannot be placed", diff --git a/src/main/resources/assets/techreborn/models/item/muffler_upgrade.json b/src/main/resources/assets/techreborn/models/item/muffler_upgrade.json new file mode 100644 index 000000000..bb23ade39 --- /dev/null +++ b/src/main/resources/assets/techreborn/models/item/muffler_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "techreborn:item/upgrade/muffler_upgrade" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/techreborn/textures/item/upgrade/muffler_upgrade.png b/src/main/resources/assets/techreborn/textures/item/upgrade/muffler_upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..bb3a7b498e7cbf38fcc5b96ab2b3405058c6e48a GIT binary patch literal 579 zcmV-J0=)f+P)5;`PE2z1JYBgtLwJ%?&Yaut{Uw)cI!@9+EjzTX$Fx~i|A=`W=X zJ&S*Q{7}Eo--+SoEU>t6onbPH5#L^%r^7IYCngX1d|pc_iJ}Ol6k2Pv))-9uTL7`C4j^iMuL@CA1y}hYUKMxK_CX)m~fDl60YPG}^fngZ5S}lYSte4At zE0xG(GPte_z~TNr-*K&R7TI2^_mq*5uOXxjbp!T+RVmtrg(S7}9?biRZU@y!wxFidAZ(QRSqbm