Skip to content

Commit

Permalink
Add Sound System to GTCEu (#234)
Browse files Browse the repository at this point in the history
* Start sound addition

* Tool sounds, start

* Config time

* More sounds

* science

* Acquire all machine sounds

* Set remaining simple machine sounds

* All remaining sounds

* All remaining sounds

* Pick selected wrench sound

* Refactor onAttached calls

* May or may not fix CME

* Compressor.ogg fixes

* More sound fixes

* More sound fixes

* Get hammers to do muffling toggling

* Implement @Zalgo239's hum.ogg

* Requested changes

* Typo

* Requested changes round 2

* Requested changes round 2

* Try to fix formatting, try 2

* Try to fix formatting, try 3

* Move to ToolChainsaw

* add ability to make MetaItem records

* Fix unobfuscated mapping

* Use field_72769_h

* Wrench rotation sounds

* Re-cherry-pick Kila's commit

Co-authored-by: DStrand1 <[email protected]>
Co-authored-by: Yefancy <[email protected]>
  • Loading branch information
3 people authored Nov 26, 2021
1 parent dd5f91e commit e3e2960
Show file tree
Hide file tree
Showing 83 changed files with 976 additions and 122 deletions.
3 changes: 3 additions & 0 deletions src/main/java/gregtech/GregTechMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import gregtech.api.gui.UIFactory;
import gregtech.api.items.gui.PlayerInventoryUIFactory;
import gregtech.api.metatileentity.MetaTileEntityUIFactory;
import gregtech.api.sound.GTSounds;
import gregtech.api.model.ResourcePackHook;
import gregtech.api.net.NetworkHandler;
import gregtech.api.recipes.RecipeMap;
Expand Down Expand Up @@ -117,6 +118,8 @@ public void onPreInit(FMLPreInitializationEvent event) {
MetaItems.init();
MetaFluids.init();

GTSounds.registerSounds();

/* Start MetaTileEntity Registration */
MTE_REGISTRY.unfreeze();
GTLog.logger.info("Registering GTCEu Meta Tile Entities");
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/gregtech/api/GTValues.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ public static boolean isModLoaded(String modid) {
Class.forName(modid);
isLoaded = true;
} catch (ClassNotFoundException ignored) {
} catch (NoClassDefFoundError ignored) {
isLoaded = true;
}
}
isModLoadedCache.put(modid, isLoaded);
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/gregtech/api/block/machines/BlockMachine.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@
import gregtech.api.GregTechAPI;
import gregtech.api.block.BlockCustomParticle;
import gregtech.api.capability.GregtechCapabilities;
import gregtech.api.capability.tool.IHammerItem;
import gregtech.api.capability.tool.IScrewdriverItem;
import gregtech.api.capability.tool.IWrenchItem;
import gregtech.api.cover.CoverBehavior;
import gregtech.api.cover.ICoverable;
import gregtech.api.cover.IFacadeCover;
import gregtech.api.items.metaitem.MetaItem;
import gregtech.api.items.toolitem.IToolStats;
import gregtech.api.items.toolitem.ToolMetaItem;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.MetaTileEntityHolder;
import gregtech.api.pipenet.block.BlockPipe;
Expand Down Expand Up @@ -331,6 +335,11 @@ public boolean onBlockActivated(@Nonnull World worldIn, @Nonnull BlockPos pos, @

if (wrenchItem.damageItem(DamageValues.DAMAGE_FOR_WRENCH, true) &&
metaTileEntity.onWrenchClick(playerIn, hand, wrenchDirection, rayTraceResult)) {

if(itemStack.getItem() instanceof ToolMetaItem<?>) {
IToolStats stats = ((ToolMetaItem<?>) itemStack.getItem()).getItem(itemStack).getToolStats();
stats.onBreakingUse(itemStack);
}
wrenchItem.damageItem(DamageValues.DAMAGE_FOR_WRENCH, false);
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

import gregtech.api.GTValues;
import gregtech.api.capability.impl.EUToFEProvider;
import gregtech.api.capability.tool.ICutterItem;
import gregtech.api.capability.tool.IScrewdriverItem;
import gregtech.api.capability.tool.ISoftHammerItem;
import gregtech.api.capability.tool.IWrenchItem;
import gregtech.api.capability.tool.*;
import gregtech.api.terminal.hardware.HardwareProvider;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
Expand Down Expand Up @@ -36,6 +33,10 @@ public class GregtechCapabilities {
@CapabilityInject(ISoftHammerItem.class)
public static Capability<ISoftHammerItem> CAPABILITY_MALLET = null;

@CapabilityInject(IHammerItem.class)
public static Capability<IHammerItem> CAPABILITY_HAMMER = null;


@CapabilityInject(IFuelable.class)
public static Capability<IFuelable> CAPABILITY_FUELABLE = null;

Expand Down
7 changes: 7 additions & 0 deletions src/main/java/gregtech/api/capability/tool/IHammerItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package gregtech.api.capability.tool;

public interface IHammerItem {

boolean damageItem(int damage, boolean simulate);

}
48 changes: 48 additions & 0 deletions src/main/java/gregtech/api/items/metaitem/MusicDiscStats.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package gregtech.api.items.metaitem;

import gregtech.api.items.metaitem.stats.IItemBehaviour;
import gregtech.api.items.metaitem.stats.IMusicDisc;
import net.minecraft.block.BlockJukebox;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class MusicDiscStats implements IMusicDisc, IItemBehaviour {

private final SoundEvent sound;

public MusicDiscStats(SoundEvent sound) {
this.sound = sound;
}

@SideOnly(Side.CLIENT)
@Override
public SoundEvent getSound() {
return sound;
}

@Override
public ActionResult<ItemStack> onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
IBlockState iblockstate = world.getBlockState(pos);
ItemStack itemStack = player.getHeldItem(hand);
if (iblockstate.getBlock() == Blocks.JUKEBOX && !(Boolean)iblockstate.getValue(BlockJukebox.HAS_RECORD)) {
if (!world.isRemote) {
((BlockJukebox)Blocks.JUKEBOX).insertRecord(world, pos, iblockstate, itemStack);
world.playEvent(1010, pos, itemStack.getItemDamage());
itemStack.shrink(1);
player.addStat(StatList.RECORD_PLAYED);
}

return ActionResult.newResult(EnumActionResult.SUCCESS, itemStack);
} else {
return ActionResult.newResult(EnumActionResult.PASS, itemStack);
}
}
}
11 changes: 11 additions & 0 deletions src/main/java/gregtech/api/items/metaitem/stats/IMusicDisc.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package gregtech.api.items.metaitem.stats;

import net.minecraft.util.SoundEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public interface IMusicDisc extends IItemComponent {

@SideOnly(Side.CLIENT)
SoundEvent getSound();
}
29 changes: 29 additions & 0 deletions src/main/java/gregtech/api/items/toolitem/HammerItemStat.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package gregtech.api.items.toolitem;

import gregtech.api.capability.GregtechCapabilities;
import gregtech.api.capability.tool.IHammerItem;
import gregtech.api.capability.tool.IWrenchItem;
import gregtech.api.items.metaitem.stats.IItemCapabilityProvider;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;

public class HammerItemStat implements IItemCapabilityProvider {

@Override
public ICapabilityProvider createProvider(ItemStack itemStack) {
return new CapabilityProvider(itemStack);
}

private static class CapabilityProvider extends AbstractToolItemCapabilityProvider<IHammerItem> implements IHammerItem {

public CapabilityProvider(ItemStack itemStack) {
super(itemStack);
}

@Override
protected Capability<IHammerItem> getCapability() {
return GregtechCapabilities.CAPABILITY_HAMMER;
}
}
}
13 changes: 13 additions & 0 deletions src/main/java/gregtech/api/items/toolitem/IToolStats.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@
import gregtech.api.enchants.EnchantmentData;
import gregtech.api.items.metaitem.MetaItem.MetaValueItem;
import gregtech.api.unification.material.Material;
import gregtech.common.ConfigHolder;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;

import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -170,4 +173,14 @@ default int getColor(ItemStack stack, int tintIndex) {
default Set<String> getToolClasses(ItemStack stack) {
return Collections.emptySet();
}

default void onCraftingUse(ItemStack stack) {
if (ConfigHolder.toolCraftingSounds && ForgeHooks.getCraftingPlayer() != null && stack.getItem() instanceof ToolMetaItem<?>)
ForgeHooks.getCraftingPlayer().playSound(((ToolMetaItem<?>) stack.getItem()).getItem(stack).getSound(), 1, 1);
}

default void onBreakingUse(ItemStack stack) {
if (ConfigHolder.toolUseSounds && Minecraft.getMinecraft().player != null && stack.getItem() instanceof ToolMetaItem<?>)
Minecraft.getMinecraft().player.playSound(((ToolMetaItem<?>) stack.getItem()).getItem(stack).getSound(), 1, 1);
}
}
15 changes: 15 additions & 0 deletions src/main/java/gregtech/api/items/toolitem/ToolMetaItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import gregtech.common.tools.DamageValues;
import gregtech.common.tools.ToolWrench;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.enchantment.Enchantment;
Expand All @@ -46,11 +47,13 @@
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EntityDamageSource;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.fml.common.Optional.Interface;
import net.minecraftforge.fml.common.Optional.InterfaceList;
Expand Down Expand Up @@ -185,6 +188,7 @@ public ItemStack getContainerItem(ItemStack stack) {
if (metaToolValueItem.toolStats != null) {
IToolStats toolStats = metaToolValueItem.toolStats;
int toolDamagePerCraft = toolStats.getToolDamagePerContainerCraft(stack);
toolStats.onCraftingUse(stack);
boolean canApplyDamage = damageItem(stack, toolDamagePerCraft, false);
if (!canApplyDamage) return stack;
}
Expand Down Expand Up @@ -229,6 +233,7 @@ public boolean onBlockDestroyed(@Nonnull ItemStack stack, @Nonnull World world,
if (metaToolValueItem != null) {
IToolStats toolStats = metaToolValueItem.getToolStats();
toolStats.onBlockDestroyed(stack, world, state, pos, entity);
toolStats.onBreakingUse(stack);
damageItem(stack, toolStats.getToolDamagePerBlockBreak(stack), false);
}
return true;
Expand Down Expand Up @@ -700,6 +705,7 @@ public class MetaToolValueItem extends MetaValueItem {

protected IToolStats toolStats = new DummyToolStats();
protected double amountOfMaterialToRepair = 0;
protected SoundEvent sound;

protected MetaToolValueItem(int metaValue, String unlocalizedName) {
super(metaValue, unlocalizedName);
Expand All @@ -712,6 +718,15 @@ public MetaToolValueItem addComponents(IItemComponent... stats) {
return this;
}

public MetaToolValueItem setSound(SoundEvent sound) {
this.sound = sound;
return this;
}

public SoundEvent getSound() {
return sound;
}

public MetaToolValueItem setFullRepairCost(double amountOfMaterialToRepair) {
this.amountOfMaterialToRepair = amountOfMaterialToRepair;
return this;
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockPos.PooledMutableBlockPos;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
Expand Down Expand Up @@ -72,6 +73,7 @@ public abstract class MetaTileEntity implements ICoverable {
public static final IndexedCuboid6 FULL_CUBE_COLLISION = new IndexedCuboid6(null, Cuboid6.full);
public static final String TAG_KEY_PAINTING_COLOR = "PaintingColor";
public static final String TAG_KEY_FRAGILE = "Fragile";
public static final String TAG_KEY_MUFFLED = "Muffled";

public final ResourceLocation metaTileEntityId;
MetaTileEntityHolder holder;
Expand Down Expand Up @@ -103,6 +105,8 @@ public abstract class MetaTileEntity implements ICoverable {
protected List<IFluidHandler> notifiedFluidInputList = new ArrayList<>();
protected List<IFluidHandler> notifiedFluidOutputList = new ArrayList<>();

protected boolean muffled = false;

public MetaTileEntity(ResourceLocation metaTileEntityId) {
this.metaTileEntityId = metaTileEntityId;
initializeInventory();
Expand Down Expand Up @@ -747,6 +751,7 @@ public void writeInitialSyncData(PacketBuffer buf) {
}
}
buf.writeBoolean(isFragile);
buf.writeBoolean(muffled);
}

public void receiveInitialSyncData(PacketBuffer buf) {
Expand All @@ -768,6 +773,7 @@ public void receiveInitialSyncData(PacketBuffer buf) {
}
}
this.isFragile = buf.readBoolean();
this.muffled = buf.readBoolean();
}

public void writeTraitData(MTETrait trait, int internalId, Consumer<PacketBuffer> dataWriter) {
Expand Down Expand Up @@ -1180,6 +1186,7 @@ public NBTTagCompound writeToNBT(NBTTagCompound data) {
}
data.setTag("Covers", coversList);
data.setBoolean(TAG_KEY_FRAGILE, isFragile);
data.setBoolean(TAG_KEY_MUFFLED, isFragile);
return data;
}

Expand Down Expand Up @@ -1215,6 +1222,7 @@ public void readFromNBT(NBTTagCompound data) {
}

this.isFragile = data.getBoolean(TAG_KEY_FRAGILE);
this.muffled = data.getBoolean(TAG_KEY_MUFFLED);
}

@Override
Expand Down Expand Up @@ -1330,4 +1338,12 @@ public boolean getWitherProof() {

public void preInit(Object... data) {
}

public final void toggleMuffled() {
muffled = !muffled;
}

public boolean isMuffled() {
return muffled;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,29 @@
import gregtech.api.gui.widgets.ImageWidget;
import gregtech.api.gui.widgets.SlotWidget;
import gregtech.api.gui.widgets.TankWidget;
import gregtech.api.metatileentity.sound.ISoundCreator;
import gregtech.api.metatileentity.sound.PositionedSoundMTE;
import gregtech.api.recipes.machines.FuelRecipeMap;
import gregtech.api.render.OrientedOverlayRenderer;
import gregtech.api.render.Textures;
import gregtech.api.util.PipelineUtil;
import gregtech.common.ConfigHolder;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundCategory;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.ItemStackHandler;

import javax.annotation.Nullable;
import java.util.List;

public class SimpleGeneratorMetaTileEntity extends TieredMetaTileEntity {
public class SimpleGeneratorMetaTileEntity extends TieredMetaTileEntity implements ISoundCreator {

private final FuelRecipeLogic workableHandler;
private final ItemStackHandler containerInventory;
Expand Down Expand Up @@ -146,4 +151,17 @@ public void addInformation(ItemStack stack, @Nullable World player, List<String>
tooltip.add(I18n.format("gregtech.universal.tooltip.voltage_out", energyContainer.getOutputVoltage(), GTValues.VN[getTier()]));
tooltip.add(I18n.format("gregtech.universal.tooltip.energy_storage_capacity", energyContainer.getEnergyCapacity()));
}

@Override
public void onAttached() {
super.onAttached();
if (getWorld() != null && getWorld().isRemote) {
this.setupSound(recipeMap.getSound(), this.getPos());
}
}

public boolean canCreateSound() {
return workableHandler.isActive();
}

}
Loading

0 comments on commit e3e2960

Please sign in to comment.