diff --git a/src/main/java/gregtech/api/block/IStateSoundType.java b/src/main/java/gregtech/api/block/IStateSoundType.java new file mode 100644 index 00000000000..003ca0f8fff --- /dev/null +++ b/src/main/java/gregtech/api/block/IStateSoundType.java @@ -0,0 +1,12 @@ +package gregtech.api.block; + +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; + +import org.jetbrains.annotations.NotNull; + +public interface IStateSoundType { + + @NotNull + SoundType getSoundType(@NotNull IBlockState state); +} diff --git a/src/main/java/gregtech/api/block/VariantBlock.java b/src/main/java/gregtech/api/block/VariantBlock.java index f50823b8cfc..4440d6d60b5 100644 --- a/src/main/java/gregtech/api/block/VariantBlock.java +++ b/src/main/java/gregtech/api/block/VariantBlock.java @@ -4,6 +4,7 @@ import gregtech.common.creativetab.GTCreativeTabs; import net.minecraft.block.Block; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockStateContainer; @@ -11,9 +12,11 @@ import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.util.IStringSerializable; import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -112,6 +115,16 @@ public int getMetaFromState(IBlockState state) { return state.getValue(VARIANT).ordinal(); } + @NotNull + @Override + public SoundType getSoundType(@NotNull IBlockState state, @NotNull World world, @NotNull BlockPos pos, + @Nullable Entity entity) { + if (getState(state) instanceof IStateSoundType stateSoundType) { + return stateSoundType.getSoundType(state); + } + return super.getSoundType(state, world, pos, entity); + } + // magic is here @SuppressWarnings("unchecked") protected static Class getActualTypeParameter(Class thisClass, Class declaringClass) { diff --git a/src/main/java/gregtech/api/block/machines/BlockMachine.java b/src/main/java/gregtech/api/block/machines/BlockMachine.java index 2a04cf5d441..5cac56bb49c 100644 --- a/src/main/java/gregtech/api/block/machines/BlockMachine.java +++ b/src/main/java/gregtech/api/block/machines/BlockMachine.java @@ -590,4 +590,13 @@ public void randomDisplayTick(@NotNull IBlockState stateIn, @NotNull World world MetaTileEntity metaTileEntity = getMetaTileEntity(worldIn, pos); if (metaTileEntity != null) metaTileEntity.randomDisplayTick(); } + + @NotNull + @Override + public SoundType getSoundType(@NotNull IBlockState state, @NotNull World world, @NotNull BlockPos pos, + @Nullable Entity entity) { + MetaTileEntity metaTileEntity = getMetaTileEntity(world, pos); + if (metaTileEntity == null) return getSoundType(); + return metaTileEntity.getSoundType(); + } } diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index c39b082e68a..e4d93026f8f 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -41,6 +41,7 @@ import gregtech.common.items.MetaItems; import net.minecraft.block.Block; +import net.minecraft.block.SoundType; import net.minecraft.block.state.BlockFaceShape; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; @@ -908,6 +909,14 @@ private void updateSound() { } } + /** + * @return The sound type used when this block is broken, placed, stepped on, hit, or fallen on. + */ + @NotNull + public SoundType getSoundType() { + return SoundType.METAL; + } + public final @NotNull ItemStack getStackForm(int amount) { int metaTileEntityIntId = registry.getIdByObjectName(metaTileEntityId); return new ItemStack(registry.getBlock(), amount, metaTileEntityIntId); diff --git a/src/main/java/gregtech/common/blocks/BlockMetalCasing.java b/src/main/java/gregtech/common/blocks/BlockMetalCasing.java index ecc522bcb89..01190b94bdc 100644 --- a/src/main/java/gregtech/common/blocks/BlockMetalCasing.java +++ b/src/main/java/gregtech/common/blocks/BlockMetalCasing.java @@ -1,6 +1,7 @@ package gregtech.common.blocks; import gregtech.api.block.IStateHarvestLevel; +import gregtech.api.block.IStateSoundType; import gregtech.api.block.VariantBlock; import gregtech.api.items.toolitem.ToolClasses; @@ -31,27 +32,33 @@ public boolean canCreatureSpawn(@NotNull IBlockState state, @NotNull IBlockAcces return false; } - public enum MetalCasingType implements IStringSerializable, IStateHarvestLevel { + public enum MetalCasingType implements IStringSerializable, IStateHarvestLevel, IStateSoundType { BRONZE_BRICKS("bronze_bricks", 1), - PRIMITIVE_BRICKS("primitive_bricks", 1), + PRIMITIVE_BRICKS("primitive_bricks", 1, SoundType.STONE), INVAR_HEATPROOF("invar_heatproof", 1), ALUMINIUM_FROSTPROOF("aluminium_frostproof", 1), STEEL_SOLID("steel_solid", 2), STAINLESS_CLEAN("stainless_clean", 2), TITANIUM_STABLE("titanium_stable", 2), TUNGSTENSTEEL_ROBUST("tungstensteel_robust", 3), - COKE_BRICKS("coke_bricks", 1), + COKE_BRICKS("coke_bricks", 1, SoundType.STONE), PTFE_INERT_CASING("ptfe_inert", 0), HSSE_STURDY("hsse_sturdy", 3), PALLADIUM_SUBSTATION("palladium_substation", 3); private final String name; private final int harvestLevel; + private final SoundType soundType; - MetalCasingType(String name, int harvestLevel) { + MetalCasingType(String name, int harvestLevel, SoundType soundType) { this.name = name; this.harvestLevel = harvestLevel; + this.soundType = soundType; + } + + MetalCasingType(String name, int harvestLevel) { + this(name, harvestLevel, SoundType.METAL); } @NotNull @@ -69,5 +76,11 @@ public int getHarvestLevel(IBlockState state) { public String getHarvestTool(IBlockState state) { return ToolClasses.WRENCH; } + + @NotNull + @Override + public SoundType getSoundType(@NotNull IBlockState state) { + return soundType; + } } } diff --git a/src/main/java/gregtech/common/blocks/BlockSteamCasing.java b/src/main/java/gregtech/common/blocks/BlockSteamCasing.java index 58188233370..bff631788fb 100644 --- a/src/main/java/gregtech/common/blocks/BlockSteamCasing.java +++ b/src/main/java/gregtech/common/blocks/BlockSteamCasing.java @@ -1,6 +1,7 @@ package gregtech.common.blocks; import gregtech.api.block.IStateHarvestLevel; +import gregtech.api.block.IStateSoundType; import gregtech.api.block.VariantBlock; import gregtech.api.items.toolitem.ToolClasses; @@ -51,21 +52,27 @@ public void addInformation(@NotNull ItemStack stack, @Nullable World player, @No } } - public enum SteamCasingType implements IStringSerializable, IStateHarvestLevel { + public enum SteamCasingType implements IStringSerializable, IStateHarvestLevel, IStateSoundType { BRONZE_HULL("bronze_hull", 1), BRONZE_BRICKS_HULL("bronze_bricks_hull", 1), STEEL_HULL("steel_hull", 2), STEEL_BRICKS_HULL("steel_bricks_hull", 2), - PUMP_DECK("pump_deck", 1), - WOOD_WALL("wood_wall", 0); + PUMP_DECK("pump_deck", 1, SoundType.WOOD), + WOOD_WALL("wood_wall", 0, SoundType.WOOD); private final String name; private final int harvestLevel; + private final SoundType soundType; - SteamCasingType(String name, int harvestLevel) { + SteamCasingType(String name, int harvestLevel, SoundType soundType) { this.name = name; this.harvestLevel = harvestLevel; + this.soundType = soundType; + } + + SteamCasingType(String name, int harvestLevel) { + this(name, harvestLevel, SoundType.METAL); } @Override @@ -83,5 +90,11 @@ public int getHarvestLevel(IBlockState state) { public String getHarvestTool(IBlockState state) { return ToolClasses.WRENCH; } + + @NotNull + @Override + public SoundType getSoundType(@NotNull IBlockState state) { + return soundType; + } } } diff --git a/src/main/java/gregtech/common/metatileentities/MetaTileEntityClipboard.java b/src/main/java/gregtech/common/metatileentities/MetaTileEntityClipboard.java index 02fbe96793d..1f054c5abb5 100644 --- a/src/main/java/gregtech/common/metatileentities/MetaTileEntityClipboard.java +++ b/src/main/java/gregtech/common/metatileentities/MetaTileEntityClipboard.java @@ -21,6 +21,7 @@ import gregtech.core.network.packets.PacketClipboardNBTUpdate; import net.minecraft.block.Block; +import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.creativetab.CreativeTabs; @@ -548,4 +549,10 @@ public boolean showToolUsages() { public ItemStack getPickItem(EntityPlayer player) { return this.getClipboard(); } + + @NotNull + @Override + public SoundType getSoundType() { + return SoundType.WOOD; + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityCokeOven.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityCokeOven.java index 72021b7cf61..e63d6a6b6e4 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityCokeOven.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityCokeOven.java @@ -21,6 +21,7 @@ import gregtech.common.metatileentities.MetaTileEntities; import gregtech.common.mui.widget.GTFluidSlot; +import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -168,4 +169,10 @@ public boolean onRightClick(EntityPlayer playerIn, EnumHand hand, EnumFacing fac } return super.onRightClick(playerIn, hand, facing, hitResult); } + + @NotNull + @Override + public SoundType getSoundType() { + return SoundType.STONE; + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityCokeOvenHatch.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityCokeOvenHatch.java index acb83429697..905d9205453 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityCokeOvenHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityCokeOvenHatch.java @@ -12,6 +12,7 @@ import gregtech.client.renderer.texture.Textures; import gregtech.common.metatileentities.multi.multiblockpart.MetaTileEntityMultiblockPart; +import net.minecraft.block.SoundType; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -30,6 +31,7 @@ import codechicken.lib.render.CCRenderState; import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Matrix4; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -127,4 +129,10 @@ public boolean onRightClick(EntityPlayer playerIn, EnumHand hand, EnumFacing fac } return super.onRightClick(playerIn, hand, facing, hitResult); } + + @NotNull + @Override + public SoundType getSoundType() { + return SoundType.STONE; + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityMultiblockTank.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityMultiblockTank.java index d717903228e..8bb43d653f9 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityMultiblockTank.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityMultiblockTank.java @@ -20,6 +20,7 @@ import gregtech.common.metatileentities.MetaTileEntities; import gregtech.common.mui.widget.GTFluidSlot; +import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; @@ -191,4 +192,10 @@ public T getCapability(Capability capability, EnumFacing side) { } return super.getCapability(capability, side); } + + @NotNull + @Override + public SoundType getSoundType() { + return this.isMetal ? SoundType.METAL : SoundType.WOOD; + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPrimitiveBlastFurnace.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPrimitiveBlastFurnace.java index b7dd899205f..abc1e11b3cc 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPrimitiveBlastFurnace.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPrimitiveBlastFurnace.java @@ -24,6 +24,7 @@ import gregtech.common.blocks.BlockMetalCasing; import gregtech.common.blocks.MetaBlocks; +import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.init.SoundEvents; @@ -209,4 +210,10 @@ public void randomDisplayTick() { } } } + + @NotNull + @Override + public SoundType getSoundType() { + return SoundType.STONE; + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPrimitiveWaterPump.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPrimitiveWaterPump.java index 0017c750d94..685ec7e2674 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPrimitiveWaterPump.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPrimitiveWaterPump.java @@ -17,6 +17,7 @@ import gregtech.common.blocks.MetaBlocks; import gregtech.common.metatileentities.MetaTileEntities; +import net.minecraft.block.SoundType; import net.minecraft.client.resources.I18n; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -191,4 +192,10 @@ public int getFluidProduction() { public boolean allowsExtendedFacing() { return false; } + + @NotNull + @Override + public SoundType getSoundType() { + return SoundType.WOOD; + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java index a251b2f2a46..0537a814d37 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityPumpHatch.java @@ -18,6 +18,7 @@ import gregtech.common.metatileentities.storage.MetaTileEntityQuantumTank; import gregtech.common.mui.widget.GTFluidSlot; +import net.minecraft.block.SoundType; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -191,4 +192,10 @@ public void addToolUsages(ItemStack stack, @Nullable World world, List t public int getDefaultPaintingColor() { return 0xFFFFFF; } + + @NotNull + @Override + public SoundType getSoundType() { + return SoundType.WOOD; + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java index 231a19fee37..ac5c9d85182 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java +++ b/src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityTankValve.java @@ -13,6 +13,7 @@ import gregtech.client.renderer.texture.Textures; import gregtech.common.metatileentities.multi.multiblockpart.MetaTileEntityMultiblockPart; +import net.minecraft.block.SoundType; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -150,4 +151,10 @@ public void addToolUsages(ItemStack stack, @Nullable World world, List t tooltip.add(I18n.format("gregtech.tool_action.wrench.set_facing")); super.addToolUsages(stack, world, tooltip, advanced); } + + @NotNull + @Override + public SoundType getSoundType() { + return this.isMetal ? SoundType.METAL : SoundType.WOOD; + } } diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java index e4a8392b074..1da4918ffcc 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityCrate.java @@ -11,6 +11,7 @@ import gregtech.client.renderer.texture.Textures; import gregtech.common.items.MetaItems; +import net.minecraft.block.SoundType; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; @@ -279,4 +280,10 @@ public void addToolUsages(ItemStack stack, @Nullable World world, List t tooltip.add(I18n.format("gregtech.tool_action.screwdriver.access_covers")); super.addToolUsages(stack, world, tooltip, advanced); } + + @NotNull + @Override + public SoundType getSoundType() { + return ModHandler.isMaterialWood(material) ? SoundType.WOOD : SoundType.METAL; + } } diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityDrum.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityDrum.java index a478d5ac3b6..6e94076e584 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityDrum.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityDrum.java @@ -13,6 +13,7 @@ import gregtech.client.renderer.texture.Textures; import gregtech.client.utils.TooltipHelper; +import net.minecraft.block.SoundType; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; @@ -315,4 +316,10 @@ public void readFromNBT(NBTTagCompound data) { protected boolean shouldSerializeInventories() { return false; } + + @NotNull + @Override + public SoundType getSoundType() { + return this.isWood ? SoundType.WOOD : SoundType.METAL; + } } diff --git a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java index 45dcae211fe..cf19d68fe16 100644 --- a/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java +++ b/src/main/java/gregtech/common/metatileentities/storage/MetaTileEntityWorkbench.java @@ -17,6 +17,7 @@ import gregtech.common.mui.widget.workbench.CraftingOutputSlot; import gregtech.common.mui.widget.workbench.RecipeMemorySlot; +import net.minecraft.block.SoundType; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.I18n; import net.minecraft.init.Blocks; @@ -487,4 +488,10 @@ public boolean canRenderMachineGrid(@NotNull ItemStack mainHandStack, @NotNull I public boolean showToolUsages() { return false; } + + @NotNull + @Override + public SoundType getSoundType() { + return SoundType.WOOD; + } }