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 000000000..bb3a7b498 Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/item/upgrade/muffler_upgrade.png differ diff --git a/src/main/resources/data/techreborn/advancements/recipes/crafting_table/upgrade/muffler_upgrade.json b/src/main/resources/data/techreborn/advancements/recipes/crafting_table/upgrade/muffler_upgrade.json new file mode 100644 index 000000000..36289b37a --- /dev/null +++ b/src/main/resources/data/techreborn/advancements/recipes/crafting_table/upgrade/muffler_upgrade.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "techreborn:crafting_table/upgrade/muffler_upgrade" + ] + }, + "criteria": { + "has_electronic_circuit": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": ["techreborn:electronic_circuit"] + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "techreborn:crafting_table/upgrade/muffler_upgrade" + } + } + }, + "requirements": [ + [ + "has_electronic_circuit", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/techreborn/advancements/upgrade.json b/src/main/resources/data/techreborn/advancements/upgrade.json index ed1943940..9983cfec9 100644 --- a/src/main/resources/data/techreborn/advancements/upgrade.json +++ b/src/main/resources/data/techreborn/advancements/upgrade.json @@ -51,9 +51,19 @@ } ] } - } + }, + "muffler": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": ["techreborn:muffler_upgrade"] + } + ] + } + } }, "requirements": [ - ["overclocker", "transformer","energystorage","superconductor"] + ["overclocker", "transformer","energystorage","superconductor","muffler"] ] } diff --git a/src/main/resources/data/techreborn/recipes/crafting_table/upgrade/muffler_upgrade.json b/src/main/resources/data/techreborn/recipes/crafting_table/upgrade/muffler_upgrade.json new file mode 100644 index 000000000..65468ccfc --- /dev/null +++ b/src/main/resources/data/techreborn/recipes/crafting_table/upgrade/muffler_upgrade.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " W ", + "WCW", + " W " + ], + "key": { + "C": { + "item": "techreborn:electronic_circuit" + }, + "W": { + "tag": "minecraft:wool" + } + }, + "result": { + "item": "techreborn:muffler_upgrade" + } +} \ No newline at end of file