Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Sound System to GTCEu #234

Merged
merged 29 commits into from
Nov 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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