From f9385558cf89c54a5998d27d5cb83f7542804ef0 Mon Sep 17 00:00:00 2001 From: DrMangoTea Date: Mon, 6 Nov 2023 16:18:11 +0100 Subject: [PATCH] sounds --- .../drmangotea/createindustry/CreateTFMG.java | 5 +- .../diesel/DieselEngineBlockEntity.java | 21 +- .../engines/diesel/DieselEngineValueBox.java | 79 ---- .../small/AbstractEngineTileEntity.java | 11 +- .../coke_oven/CokeOvenBlockEntity.java | 4 +- .../registry/TFMGSoundEvents.java | 440 ++++++++++++++++++ .../assets/createindustry/sounds.json | 13 + .../createindustry/sounds/diesel_engine.ogg | Bin 0 -> 6817 bytes .../createindustry/sounds/diesel_engine_.ogg | Bin 0 -> 6817 bytes .../recipes/coking/coal_coke.json | 6 +- 10 files changed, 475 insertions(+), 104 deletions(-) delete mode 100644 src/main/java/com/drmangotea/createindustry/blocks/engines/diesel/DieselEngineValueBox.java create mode 100644 src/main/java/com/drmangotea/createindustry/registry/TFMGSoundEvents.java create mode 100644 src/main/resources/assets/createindustry/sounds.json create mode 100644 src/main/resources/assets/createindustry/sounds/diesel_engine.ogg create mode 100644 src/main/resources/assets/createindustry/sounds/diesel_engine_.ogg diff --git a/src/main/java/com/drmangotea/createindustry/CreateTFMG.java b/src/main/java/com/drmangotea/createindustry/CreateTFMG.java index b47a2f40..378ac9d2 100644 --- a/src/main/java/com/drmangotea/createindustry/CreateTFMG.java +++ b/src/main/java/com/drmangotea/createindustry/CreateTFMG.java @@ -54,16 +54,19 @@ public class CreateTFMG TFMGCreativeModeTabs.init(); TFMGFluids.register(); TFMGPaletteBlocks.register(); + TFMGSoundEvents.prepare(); TFMGColoredFires.register(modEventBus); TFMGFeatures.register(modEventBus); TFMGRecipeTypes.register(modEventBus); // + MinecraftForge.EVENT_BUS.register(this); modEventBus.addListener(EventPriority.LOWEST, CreateTFMG::gatherData); + modEventBus.addListener(TFMGSoundEvents::register); DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> CreateTFMGClient::new); modEventBus.addListener(this::clientSetup); - MinecraftForge.EVENT_BUS.register(this); + } @SuppressWarnings("removal") public static void gatherData(GatherDataEvent event) { diff --git a/src/main/java/com/drmangotea/createindustry/blocks/engines/diesel/DieselEngineBlockEntity.java b/src/main/java/com/drmangotea/createindustry/blocks/engines/diesel/DieselEngineBlockEntity.java index cd5fd070..d9e9eac6 100644 --- a/src/main/java/com/drmangotea/createindustry/blocks/engines/diesel/DieselEngineBlockEntity.java +++ b/src/main/java/com/drmangotea/createindustry/blocks/engines/diesel/DieselEngineBlockEntity.java @@ -1,11 +1,10 @@ package com.drmangotea.createindustry.blocks.engines.diesel; -import com.drmangotea.createindustry.CreateTFMG; import com.drmangotea.createindustry.blocks.engines.diesel.engine_expansion.DieselEngineExpansionBlockEntity; -import com.drmangotea.createindustry.registry.TFMGBlockEntities; import com.drmangotea.createindustry.registry.TFMGBlocks; import com.drmangotea.createindustry.registry.TFMGFluids; +import com.drmangotea.createindustry.registry.TFMGSoundEvents; import com.simibubi.create.content.contraptions.bearing.WindmillBearingBlockEntity; import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation; import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity; @@ -17,7 +16,6 @@ import com.simibubi.create.content.kinetics.steamEngine.SteamEngineBlock; import com.simibubi.create.content.kinetics.steamEngine.SteamEngineValueBox; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; -import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour; import com.simibubi.create.foundation.blockEntity.behaviour.scrollValue.ScrollOptionBehaviour; import com.simibubi.create.foundation.fluid.CombinedTankWrapper; import com.simibubi.create.foundation.fluid.SmartFluidTank; @@ -28,10 +26,7 @@ import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.AxisDirection; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtUtils; import net.minecraft.network.chat.Component; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.DirectionalBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; @@ -129,7 +124,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo super.tick(); Direction direction; - + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::makeSound); if(getBlockState().getValue(FACE)==AttachFace.WALL) expansionPos = this.getBlockPos().relative(getBlockState().getValue(FACING).getOpposite()); @@ -206,7 +201,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo } shaft.update(worldPosition, conveyedSpeedLevel, engineStrength); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::makeSound); + } @OnlyIn(Dist.CLIENT) private void makeSound(){ @@ -214,8 +209,8 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo PoweredShaftBlockEntity ste = target.get(); if (ste == null) return; - if (!ste.isPoweredBy(worldPosition) || ste.engineEfficiency == 0) - return; + //if (engineStrength == 0) + // return; if (targetAngle == null) return; @@ -231,13 +226,13 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo prevAngle = angle; return; } + if (angle < 0 && !(prevAngle < -180 && angle > -180)) { prevAngle = angle; return; } - float pitch = 1.18f - level.random.nextFloat() * .25f; - //CISoundEvents.DIESEL_ENGINE_SOUNDS.playAt(level, worldPosition, 0.3f, .2f, false); + TFMGSoundEvents.ENGINE.playAt(level, worldPosition, 1.0f, 1f, false); prevAngle = angle; } @@ -392,7 +387,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo if (!TFMGBlocks.DIESEL_ENGINE.has(blockState)) return null; - Direction facing = DieselEngineBlock.getFacing(blockState); + Direction facing = SteamEngineBlock.getFacing(blockState); PoweredShaftBlockEntity shaft = getShaft(); Axis facingAxis = facing.getAxis(); Axis axis = Axis.Y; diff --git a/src/main/java/com/drmangotea/createindustry/blocks/engines/diesel/DieselEngineValueBox.java b/src/main/java/com/drmangotea/createindustry/blocks/engines/diesel/DieselEngineValueBox.java deleted file mode 100644 index cb26437e..00000000 --- a/src/main/java/com/drmangotea/createindustry/blocks/engines/diesel/DieselEngineValueBox.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.drmangotea.createindustry.blocks.engines.diesel; - - -import com.jozufozu.flywheel.util.transform.TransformStack; -import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; -import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.Pointing; -import com.simibubi.create.foundation.utility.VecHelper; -import net.minecraft.core.Direction; -import net.minecraft.core.Direction.Axis; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.Vec3; - -public class DieselEngineValueBox extends ValueBoxTransform.Sided { - - @Override - protected boolean isSideActive(BlockState state, Direction direction) { - return DieselEngineBlock.getFacing(state) - .getAxis() != direction.getAxis(); - } - - @Override - public Vec3 getLocalOffset(BlockState state) { - Direction side = getSide(); - Direction engineFacing = DieselEngineBlock.getFacing(state); - - float roll = 0; - for (Pointing p : Pointing.values()) { - if (p.getCombinedDirection(engineFacing) == side) - roll = p.getXRotation(); - } - if (engineFacing == Direction.UP) - roll += 180; - - float horizontalAngle = AngleHelper.horizontalAngle(engineFacing); - float verticalAngle = AngleHelper.verticalAngle(engineFacing); - - boolean recessed = roll % 180 == 0; - if (engineFacing.getAxis() == Axis.Y) - recessed ^= state.getValue(DieselEngineBlock.FACING).getAxis() == Axis.X; - - Vec3 local = VecHelper.voxelSpace(8, recessed ? 13 : 15, 9); - - local = VecHelper.rotateCentered(local, roll, Axis.Z); - local = VecHelper.rotateCentered(local, horizontalAngle, Axis.Y); - local = VecHelper.rotateCentered(local, verticalAngle, Axis.X); - - return local; - } - - @Override - public void rotate(BlockState state, PoseStack ms) { - Direction facing = DieselEngineBlock.getFacing(state); - - if (facing.getAxis() == Axis.Y) { - super.rotate(state, ms); - return; - } - - float roll = 0; - for (Pointing p : Pointing.values()) { - if (p.getCombinedDirection(facing) == getSide()) - roll = p.getXRotation(); - } - - float yRot = AngleHelper.horizontalAngle(facing) + (facing == Direction.DOWN ? 180 : 0); - TransformStack.cast(ms) - .rotateY(yRot) - .rotateX(facing == Direction.DOWN ? -90 : 90) - .rotateY(roll); - } - - @Override - protected Vec3 getSouthLocation() { - return Vec3.ZERO; - } - -} diff --git a/src/main/java/com/drmangotea/createindustry/blocks/engines/small/AbstractEngineTileEntity.java b/src/main/java/com/drmangotea/createindustry/blocks/engines/small/AbstractEngineTileEntity.java index d3c6b5d3..70b9ca8a 100644 --- a/src/main/java/com/drmangotea/createindustry/blocks/engines/small/AbstractEngineTileEntity.java +++ b/src/main/java/com/drmangotea/createindustry/blocks/engines/small/AbstractEngineTileEntity.java @@ -4,13 +4,12 @@ package com.drmangotea.createindustry.blocks.engines.small; import com.drmangotea.createindustry.blocks.engines.small.turbine.TurbineEngineTileEntity; import com.drmangotea.createindustry.registry.TFMGBlocks; import com.drmangotea.createindustry.registry.TFMGFluids; -import com.simibubi.create.AllSoundEvents; +import com.drmangotea.createindustry.registry.TFMGSoundEvents; import com.simibubi.create.Create; import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation; import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; -import com.simibubi.create.foundation.blockEntity.behaviour.fluid.SmartFluidTankBehaviour; import com.simibubi.create.foundation.fluid.CombinedTankWrapper; import com.simibubi.create.foundation.fluid.SmartFluidTank; import com.simibubi.create.foundation.utility.Lang; @@ -444,7 +443,7 @@ public void write(CompoundTag compound, boolean clientPacket) { soundTimer++; // if(!isExhaustTankFull()) { - if (soundTimer >= ((16-signal)/2)+1) { + if (soundTimer >= ((16-signal)/0.8)+1) { if(signal!=0&& hasBackPart()&& tankInventory.getFluidAmount()!=0 && @@ -543,11 +542,11 @@ public void write(CompoundTag compound, boolean clientPacket) { private void makeSound(){ soundTimer=0; if(this instanceof TurbineEngineTileEntity){ - AllSoundEvents.WHISTLE_CHIFF.playAt(level, worldPosition, 0.03f, .2f, false); + TFMGSoundEvents.ENGINE.playAt(level, worldPosition, 0.4f, 1.5f, false); } - //else + else - // CISoundEvents.DIESEL_ENGINE_SOUNDS.playAt(level, worldPosition, 0.9f, .1f, false); + TFMGSoundEvents.ENGINE.playAt(level, worldPosition, 0.6f, 1f, false); } diff --git a/src/main/java/com/drmangotea/createindustry/blocks/machines/metal_processing/coke_oven/CokeOvenBlockEntity.java b/src/main/java/com/drmangotea/createindustry/blocks/machines/metal_processing/coke_oven/CokeOvenBlockEntity.java index 90d4a905..25fda2fe 100644 --- a/src/main/java/com/drmangotea/createindustry/blocks/machines/metal_processing/coke_oven/CokeOvenBlockEntity.java +++ b/src/main/java/com/drmangotea/createindustry/blocks/machines/metal_processing/coke_oven/CokeOvenBlockEntity.java @@ -187,14 +187,14 @@ public class CokeOvenBlockEntity extends TFMGMachineBlockEntity implements IWren if(lastRecipe!=null &&isController &&timer==-1 - &&inputInventory.getItem(0).getCount()>=20&& + &&inputInventory.getItem(0).getCount()>=10&& (tank2.getPrimaryHandler().getFluidAmount()+CARBON_DIOXIDE_PRODUCTION)<=tank2.getPrimaryHandler().getCapacity()&& (tank1.getPrimaryHandler().getFluidAmount()+lastRecipe.getFluidResults().get(0).getAmount())<=tank1.getPrimaryHandler().getCapacity( )){ timer = lastRecipe.getProcessingDuration(); - inputInventory.setItem(0,new ItemStack(inputInventory.getItem(0).getItem(),inputInventory.getItem(0).getCount()-20)); + inputInventory.setItem(0,new ItemStack(inputInventory.getItem(0).getItem(),inputInventory.getItem(0).getCount()-10)); } // if(lastRecipe != null) diff --git a/src/main/java/com/drmangotea/createindustry/registry/TFMGSoundEvents.java b/src/main/java/com/drmangotea/createindustry/registry/TFMGSoundEvents.java new file mode 100644 index 00000000..ad017204 --- /dev/null +++ b/src/main/java/com/drmangotea/createindustry/registry/TFMGSoundEvents.java @@ -0,0 +1,440 @@ + +package com.drmangotea.createindustry.registry; + + +import com.drmangotea.createindustry.CreateTFMG; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.simibubi.create.Create; +import net.minecraft.core.Registry; +import net.minecraft.core.Vec3i; +import net.minecraft.data.CachedOutput; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.DataProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegisterEvent; +import net.minecraftforge.registries.RegistryObject; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + + +public class TFMGSoundEvents { + + public static final Map ALL = new HashMap<>(); + + public static final TFMGSoundEvents.SoundEntry + + + ENGINE = create("diesel_engine") + .subtitle("idk how to call this :3") + .category(SoundSource.BLOCKS) + .attenuationDistance(10) + .build(); + + + + private static TFMGSoundEvents.SoundEntryBuilder create(String name) { + return create(CreateTFMG.asResource(name)); + } + + public static TFMGSoundEvents.SoundEntryBuilder create(ResourceLocation id) { + return new TFMGSoundEvents.SoundEntryBuilder(id); + } + + public static void prepare() { + for (TFMGSoundEvents.SoundEntry entry : ALL.values()) + entry.prepare(); + } + + public static void register(RegisterEvent event) { + event.register(Registry.SOUND_EVENT_REGISTRY, helper -> { + for (TFMGSoundEvents.SoundEntry entry : ALL.values()) + entry.register(helper); + }); + } + + public static JsonObject provideLangEntries() { + JsonObject object = new JsonObject(); + for (TFMGSoundEvents.SoundEntry entry : ALL.values()) + if (entry.hasSubtitle()) + object.addProperty(entry.getSubtitleKey(), entry.getSubtitle()); + return object; + } + + public static TFMGSoundEvents.SoundEntryProvider provider(DataGenerator generator) { + return new TFMGSoundEvents.SoundEntryProvider(generator); + } + + public static void playItemPickup(Player player) { + player.level.playSound(null, player.blockPosition(), SoundEvents.ITEM_PICKUP, SoundSource.PLAYERS, .2f, + 1f + Create.RANDOM.nextFloat()); + } + +// @SubscribeEvent +// public static void cancelSubtitlesOfCompoundedSounds(PlaySoundEvent event) { +// ResourceLocation soundLocation = event.getSound().getSoundLocation(); +// if (!soundLocation.getNamespace().equals(Create.ID)) +// return; +// if (soundLocation.getPath().contains("_compounded_") +// event.setResultSound(); +// +// } + + private static class SoundEntryProvider implements DataProvider { + + private DataGenerator generator; + + public SoundEntryProvider(DataGenerator generator) { + this.generator = generator; + } + + @Override + public void run(CachedOutput cache) throws IOException { + generate(generator.getOutputFolder(), cache); + } + + @Override + public String getName() { + return "TFMG's Custom Sounds"; + } + + public void generate(Path path, CachedOutput cache) { + Gson GSON = (new GsonBuilder()).setPrettyPrinting() + .disableHtmlEscaping() + .create(); + path = path.resolve("assets/createindustry"); + + try { + JsonObject json = new JsonObject(); + ALL.entrySet() + .stream() + .sorted(Map.Entry.comparingByKey()) + .forEach(entry -> { + entry.getValue() + .write(json); + }); + DataProvider.saveStable(cache, json, path.resolve("sounds.json")); + + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + + public record ConfiguredSoundEvent(Supplier event, float volume, float pitch) { + } + + public static class SoundEntryBuilder { + + protected ResourceLocation id; + protected String subtitle = "unregistered"; + protected SoundSource category = SoundSource.BLOCKS; + protected List wrappedEvents; + protected List variants; + protected int attenuationDistance; + + public SoundEntryBuilder(ResourceLocation id) { + wrappedEvents = new ArrayList<>(); + variants = new ArrayList<>(); + this.id = id; + } + + public TFMGSoundEvents.SoundEntryBuilder subtitle(String subtitle) { + this.subtitle = subtitle; + return this; + } + + public TFMGSoundEvents.SoundEntryBuilder attenuationDistance(int distance) { + this.attenuationDistance = distance; + return this; + } + + public TFMGSoundEvents.SoundEntryBuilder noSubtitle() { + this.subtitle = null; + return this; + } + + public TFMGSoundEvents.SoundEntryBuilder category(SoundSource category) { + this.category = category; + return this; + } + + public TFMGSoundEvents.SoundEntryBuilder addVariant(String name) { + return addVariant(CreateTFMG.asResource(name)); + } + + public TFMGSoundEvents.SoundEntryBuilder addVariant(ResourceLocation id) { + variants.add(id); + return this; + } + + public TFMGSoundEvents.SoundEntryBuilder playExisting(Supplier event, float volume, float pitch) { + wrappedEvents.add(new TFMGSoundEvents.ConfiguredSoundEvent(event, volume, pitch)); + return this; + } + + public TFMGSoundEvents.SoundEntryBuilder playExisting(SoundEvent event, float volume, float pitch) { + return playExisting(() -> event, volume, pitch); + } + + public TFMGSoundEvents.SoundEntryBuilder playExisting(SoundEvent event) { + return playExisting(event, 1, 1); + } + + public TFMGSoundEvents.SoundEntry build() { + TFMGSoundEvents.SoundEntry entry = + wrappedEvents.isEmpty() ? new TFMGSoundEvents.CustomSoundEntry(id, variants, subtitle, category, attenuationDistance) + : new TFMGSoundEvents.WrappedSoundEntry(id, subtitle, wrappedEvents, category, attenuationDistance); + ALL.put(entry.getId(), entry); + return entry; + } + + } + + public static abstract class SoundEntry { + + protected ResourceLocation id; + protected String subtitle; + protected SoundSource category; + protected int attenuationDistance; + + public SoundEntry(ResourceLocation id, String subtitle, SoundSource category, int attenuationDistance) { + this.id = id; + this.subtitle = subtitle; + this.category = category; + this.attenuationDistance = attenuationDistance; + } + + public abstract void prepare(); + + public abstract void register(RegisterEvent.RegisterHelper registry); + + public abstract void write(JsonObject json); + + public abstract SoundEvent getMainEvent(); + + public String getSubtitleKey() { + return id.getNamespace() + ".subtitle." + id.getPath(); + } + + public ResourceLocation getId() { + return id; + } + + public boolean hasSubtitle() { + return subtitle != null; + } + + public String getSubtitle() { + return subtitle; + } + + public void playOnServer(Level world, Vec3i pos) { + playOnServer(world, pos, 1, 1); + } + + public void playOnServer(Level world, Vec3i pos, float volume, float pitch) { + play(world, null, pos, volume, pitch); + } + + public void play(Level world, Player entity, Vec3i pos) { + play(world, entity, pos, 1, 1); + } + + public void playFrom(Entity entity) { + playFrom(entity, 1, 1); + } + + public void playFrom(Entity entity, float volume, float pitch) { + if (!entity.isSilent()) + play(entity.level, null, entity.blockPosition(), volume, pitch); + } + + public void play(Level world, Player entity, Vec3i pos, float volume, float pitch) { + play(world, entity, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, volume, pitch); + } + + public void play(Level world, Player entity, Vec3 pos, float volume, float pitch) { + play(world, entity, pos.x(), pos.y(), pos.z(), volume, pitch); + } + + public abstract void play(Level world, Player entity, double x, double y, double z, float volume, float pitch); + + public void playAt(Level world, Vec3i pos, float volume, float pitch, boolean fade) { + playAt(world, pos.getX() + .5, pos.getY() + .5, pos.getZ() + .5, volume, pitch, fade); + } + + public void playAt(Level world, Vec3 pos, float volume, float pitch, boolean fade) { + playAt(world, pos.x(), pos.y(), pos.z(), volume, pitch, fade); + } + + public abstract void playAt(Level world, double x, double y, double z, float volume, float pitch, boolean fade); + + } + + private static class WrappedSoundEntry extends TFMGSoundEvents.SoundEntry { + + private List wrappedEvents; + private List compiledEvents; + + public WrappedSoundEntry(ResourceLocation id, String subtitle, + List wrappedEvents, SoundSource category, int attenuationDistance) { + super(id, subtitle, category, attenuationDistance); + this.wrappedEvents = wrappedEvents; + compiledEvents = new ArrayList<>(); + } + + @Override + public void prepare() { + for (int i = 0; i < wrappedEvents.size(); i++) { + TFMGSoundEvents.ConfiguredSoundEvent wrapped = wrappedEvents.get(i); + ResourceLocation location = getIdOf(i); + RegistryObject event = RegistryObject.create(location, ForgeRegistries.SOUND_EVENTS); + compiledEvents.add(new TFMGSoundEvents.WrappedSoundEntry.CompiledSoundEvent(event, wrapped.volume(), wrapped.pitch())); + } + } + + @Override + public void register(RegisterEvent.RegisterHelper helper) { + for (TFMGSoundEvents.WrappedSoundEntry.CompiledSoundEvent compiledEvent : compiledEvents) { + ResourceLocation location = compiledEvent.event().getId(); + helper.register(location, new SoundEvent(location)); + } + } + + @Override + public SoundEvent getMainEvent() { + return compiledEvents.get(0) + .event().get(); + } + + protected ResourceLocation getIdOf(int i) { + return new ResourceLocation(id.getNamespace(), i == 0 ? id.getPath() : id.getPath() + "_compounded_" + i); + } + + @Override + public void write(JsonObject json) { + for (int i = 0; i < wrappedEvents.size(); i++) { + TFMGSoundEvents.ConfiguredSoundEvent event = wrappedEvents.get(i); + JsonObject entry = new JsonObject(); + JsonArray list = new JsonArray(); + JsonObject s = new JsonObject(); + s.addProperty("name", event.event() + .get() + .getLocation() + .toString()); + s.addProperty("type", "event"); + if (attenuationDistance != 0) + s.addProperty("attenuation_distance", attenuationDistance); + list.add(s); + entry.add("sounds", list); + if (i == 0 && hasSubtitle()) + entry.addProperty("subtitle", getSubtitleKey()); + json.add(getIdOf(i).getPath(), entry); + } + } + + @Override + public void play(Level world, Player entity, double x, double y, double z, float volume, float pitch) { + for (TFMGSoundEvents.WrappedSoundEntry.CompiledSoundEvent event : compiledEvents) { + world.playSound(entity, x, y, z, event.event().get(), category, event.volume() * volume, + event.pitch() * pitch); + } + } + + @Override + public void playAt(Level world, double x, double y, double z, float volume, float pitch, boolean fade) { + for (TFMGSoundEvents.WrappedSoundEntry.CompiledSoundEvent event : compiledEvents) { + world.playLocalSound(x, y, z, event.event().get(), category, event.volume() * volume, + event.pitch() * pitch, fade); + } + } + + private record CompiledSoundEvent(RegistryObject event, float volume, float pitch) { + } + + } + + private static class CustomSoundEntry extends TFMGSoundEvents.SoundEntry { + + protected List variants; + protected RegistryObject event; + + public CustomSoundEntry(ResourceLocation id, List variants, String subtitle, + SoundSource category, int attenuationDistance) { + super(id, subtitle, category, attenuationDistance); + this.variants = variants; + } + + @Override + public void prepare() { + event = RegistryObject.create(id, ForgeRegistries.SOUND_EVENTS); + } + + public void register(RegisterEvent.RegisterHelper helper) { + ResourceLocation location = event.getId(); + helper.register(location, new SoundEvent(location)); + } + + @Override + public SoundEvent getMainEvent() { + return event.get(); + } + + @Override + public void write(JsonObject json) { + JsonObject entry = new JsonObject(); + JsonArray list = new JsonArray(); + + JsonObject s = new JsonObject(); + s.addProperty("name", id.toString()); + s.addProperty("type", "file"); + if (attenuationDistance != 0) + s.addProperty("attenuation_distance", attenuationDistance); + list.add(s); + + for (ResourceLocation variant : variants) { + s = new JsonObject(); + s.addProperty("name", variant.toString()); + s.addProperty("type", "file"); + if (attenuationDistance != 0) + s.addProperty("attenuation_distance", attenuationDistance); + list.add(s); + } + + entry.add("sounds", list); + if (hasSubtitle()) + entry.addProperty("subtitle", getSubtitleKey()); + json.add(id.getPath(), entry); + } + + @Override + public void play(Level world, Player entity, double x, double y, double z, float volume, float pitch) { + world.playSound(entity, x, y, z, event.get(), category, volume, pitch); + } + + @Override + public void playAt(Level world, double x, double y, double z, float volume, float pitch, boolean fade) { + world.playLocalSound(x, y, z, event.get(), category, volume, pitch, fade); + } + + } + +} diff --git a/src/main/resources/assets/createindustry/sounds.json b/src/main/resources/assets/createindustry/sounds.json new file mode 100644 index 00000000..7e999b18 --- /dev/null +++ b/src/main/resources/assets/createindustry/sounds.json @@ -0,0 +1,13 @@ +{ + + "diesel_engine": { + "sounds": [ + { + "name": "createindustry:diesel_engine", + "type": "file", + "attenuation_distance": 16 + } + ], + "subtitle": "createindustry.subtitle.engine_sounds" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/createindustry/sounds/diesel_engine.ogg b/src/main/resources/assets/createindustry/sounds/diesel_engine.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a3885eb18ca5e0b7cbafb58c6c5cab47aac0c1e6 GIT binary patch literal 6817 zcmai23p|ut*MHZSdl|mGQVi-blC-=hWIHe|r5E7FRa+x7ANKDaD z4$ZiYORhF z)qz%Lovy$Zfv})pH=hvRlz>s`uO(*%_=5)m$9Oycet0{1ln;a90dS+A|LbWHTxFyU z=*N9dpW1mW*c;>T<7Ufek1@q)YG`U`?9tH1s1Q9p$nHLY-WcP+FrVO{zyQy{P%KY~ zfbc30tl=SB0SE?WaOM~`r7M{PL2w9iQN&87dYNJwv^e0RLZWko&ol>dl zGF+=()lD$R_1U_Y)rmNr59z>9X8r2K_`oi$u7)uAdEZ^7Ga+r?f4+V{z0_kvuLM< zXjfFsul6lsWP#WCs$&G8+->-@F>JoV#{Ad#d_ihV=^Ds`XA+E9iUKyJz_ifIx6J1z z>(m`qKwG6+Tcrel32?3u?=(=ZPiEo&Xj$Ln}XFu z`4(=5fKT;_YV2U`BO%&NA^Sl)5^B^!GjIQ5F7=lacy5OveH@y72HgUzK~(Pv*0BrG z8wjx&0H)ws+|$Y*<{`BGq7$*z2}Pykz09_*0BswA)=Ht!84vnzA19WR+V zo?DE(+4Ei{g`69e?6qfgN$rZ~E1UIf2ol zN7nmxG2Yz2!$%+Z&Gi|IlO2hPND^^F$`{I~ZVA0AnVO4h#?rSWCLJaeM_Cf(lo_Fs ze9bWsM1}KF{8z_^@+ykyDeW1&ci6$85eZnvYD592Vmy)!MCABE5|bX>iY)?B@lVHnRP0>8`RPAe=O?rkLJ72| zn(EeCdL$c?U08tq4f4?aXs2i7k%5SjfkfvGG5-#%zas|%K||%oB+V@W*OV1?)KF~I z!GA^08D!HnbjvkGvr0vaZngH$+Q;U!pGq5BXs>@;hzqGp!#G9GkzYiBC7Whb^3_vBpbc|95H~}r)|-r4Geo7 zg5)4*8*nle9v_@+7^rs~hMQ0n&clo3JwZ{6;93&+bqb-$2FiL5Qt*uubE8BR86)$k zM5R4Rm~{<>Crrn6VIb`ZK~@k%!8PNapn^M0TXKy$aAMiCX1p>Zwc8Y{o`%xGDitE! z$Fd5#O9pN6w1e+jH@LQYLl`JEmkAxsM38FYQnnvuvP9zgsapPzr0bi75 z-GPT~rncflvZLTw2HLs<+k~ca4aT#gx(rkx2vaWreugUA9>x${85%vU*qN$rhEy_> zHts}v4oF)JT-R>b*0Hi7wMmouY)C`079^IEg|vmm7aNkaF-eBhlV(Ax4(QbO9JC<~ z%aZz7oipP1Nj|`};{hqG( z$s;O0nLfVxw@WfrN=k}LSOFzvOvn7UCHW<-mEI*~rLC3acgp;y0k!OQNu^pziQ1jY z(xno$Y1ZwMT4rly#m%xi)2t6`8`Y+3PnVRH-Km`6QEQpgoHNt48s`hKZH0HHYKv=Y z1E*`xa9IK9f|996s%;Gwt(709Yj;(V<*i8MVVcvJ9nd4d`D~8kLUd)ozQ@d^R=}Y9 z8@@9LT?4k=3)}?eICDD=y6Pq|yfeW`OPDuH?o3w(?r1EXHnbu|I9>M~+2drtA#h|* zlH)*Pe#um=YTF|q2={^$gnp=jb{g6Z2-%g)wGr;k3u2vqL!2{9d&lO<1?3WAO;-Un z1bEnxZq?6|-?4_GD*%bePa>`1s%%UsoH&J{+u%gxLyi*IXqqL#SDx0Z%E8zqnKoyo zA_%9jv~Hqk9>bF0mq+U-`rR$;b(_V|WeGm&v~CCAVot9^!g_bO<|N&t!&Hn>#UlV# zleu(BLjr@2G$W|nasiMFx(!T<=?H7n;%dN(L6?4TnYO|cxLb$~i2 za~lT(Shetk^JR>u(*UcCs1yQ$c|C>5%}V95ib^7wVp%B!b8spG;chh1!5`P3MfBGJ zrvj`}2>$9E2S@X2GTdP;|5VIsTR&eW2MAYUpv(w&t7ZKHaT6N}K1`nQVz#Vf5)f|f zr&HMP%Of}j==EoY5SabF#6&=F52)+QJon)*&E0&}IsI--o^aK>*HeJ-iRTUpcv`m` zV3k5l06QH0YYNkR0U?ukrF!Cdh`-K!uR|$Mh8g%mgj}upY74RsMG(@bh z4PuEMratgsE?!m4kc(F?4mLN$Vo6*Bm{N5I9*br7<6%k+Su<62wyhr)3$#!Nbq7Ce zMJ(dj0^;lJ#ULXP#T*RCJ0fxnR8$v=j&z4BFi^lR45T}-EhWyP++jR4!+E) zXZkQ^bibyV5`cmi^GUkH4hWh72b$sM5hW;D6w*f(0J(T?xEmM$7Of33Bbq9y%E^k7 zG=#~3V}NfJ7Y{nPAs~QyFE0vo3|cpjKqS1wfH^E9lt-Wu#UV)bG^mIwtUN*@ujPWA zxdsa7>)|%fZl6h(H`rsW?~y*p6+>BhVaXFaR3}CD~`h<0+W5*uS}lN z?^dca06<(lk?BVO1i$tg2zntb3RMVhGTyC>5>wUo;44AF05c}wVvug}xXG+TFf2PA z)HsDGUg-fovb_2u0T93|2N3X+XkM2UlJu{_(eU;k0F|EqfcPa{V^CV<>OJ4pYrxG3~fbd&87UF^oSYCIj`lAzFQOa~_x z*-VYWzNJ%vd-4tu@G43GC0Hzg4~S@*10f@XNK{o~r14TmuLD6H@D^2K^b>u7l)W%U zRWDD}GXoPWqu=3*ItV!ecy&wAi6Md|>}PJJIC?h`#3#zV6ab^5)Ar=xsd%Y$OukZ*0?#efKWk;_Aiyb%GQiiZ(- zDsaQ<95wmxIr!emRcHY~O|Gt^SsL=81TVGaC|UQ5ulW#0nV#) zGz5^rFYjnX9wLEhcmzIF`6DrTp1JsoZ9QpNNb|s+bp*Pt7F;j1YBb& z&6c2YEwVefv^tCnu9g@Wqyd-Lx}-0FL^T6JR3R*sTT$PIJ0T?W2B9e~A>Kp{>GlzX z;M8V`Yq7^A5Yi==^4<1A$4|I4i&7*K6RWPQeXCh7?DT?+p<;yOW7z`8WJ;8D;BT+j z9eePn*j{6XH}F8{W;?&G_#^J~7KGn8hBC2u`es=rmNZ|OVV z1$8ujZQm=AXU(ov(tEn_Pzm~i{1IQY)O7LnQ&!KHdf4$tS#|01)UUxp)41K4fyC^! z;^a5ekm6z}0z$tZ95B&4@B9azZq}h25YWGN z1Uh<^>>Owj*CWNDx7PEGJrjSN{IE0O6Y4~t_V?mOZ}0Fvi;I=xRhaOI>-EC4o$p}q zhr;Bq_r*L!yTT87*it9C51?9~I%i34P-0*&2` z@+(2&mco&4d8J-WeHIzR&qwwm0(-n3hgMbb!usn zAHGKyXHVY9UDtGen~V95?I(MQ?prBO+n;;f!CjpG?(1GyUg$LPb3y&6gI8IQeM9&4 z#YY*YXLpGzG$YLCMV37xmo@}EdGshUazVdsYsl&LCwsiQBu*3=4@pHl{30ceK6&!z ziKyLfL-sSUXO&wIher#{URvL~G#6yLMsWMXkem~ucPIm_$uA1UwvLEGZntQC&zeZF zp20@)DQuRmL%ws788qPVP$NLQ`8QjL9*PWDdofRlo4NwEbuA_8aEaCX4pToI>iyPb z1VK4V{_ctOFzwAAFYY1GrIHCfWvZhH1)RX>U^yc0@rqBIqCHvV6Z_B0Ovf$dsJux; z*sqJutZ^ZwXf;%#uv8{BTu5u9UtmUZ+ptl@@{?Qf9mtz_ zap94~jSboIFZ|v97*OhdZSgvsnPobPl$f8}WxU>MR7Y^xVne>a{G0N;}bE$nD>8N#a3BYA8}c_6d8c@4`a$c(Rd;-OSsAg&O7C$F{si<{ub2i~3pg z^VS6jdbE!`ePW~2ruKMkvj;D)z!wJ%ZgOxqI_pv?^m6$5vz4EX+gQ@axO#dw-6Kw4 z(NT)H!r7O%>jd}fy}8ib1ufhLk-)k#UE;#_vDWhNxSB90;>U0JeJ{zXy1zf9_lpJR zsXJYG)8A=5)1#oIwz*H%m3Rn5=hs;F0zTGXOkJeMEo_o`he zM03qU-I4?zy<6!P+P=`~J|N|LxyZmdeaT6M zZlCz}`NQ$=k`o-uaC61|ulE$cphutId_#3M#~%RM<}?gFeT-j8D%JN=H%j!mHKxd2hlq=X@13p zyUd?-8y$ZX9v;swRVN;|gNYD=hg$unzzQof-g$FbKT}zy>A|Mr_gV_CLsLcvp{Xu3wQea zbGiFHW|!(W?ojO@l+k8B!Zkx@8iP)bskgV9iRP39Wvi;Nnl~a`_T;3i!-EneJZ~?3 zyl3)znYl&={LG$s^`vs#E$^hEjfsT}8AMV{?o{}caq7|T3r*oZ%s-0+wqY$DUODIq zW1Q|mlY)#Jbu~r#8z`o-+>1z2V`T5!r2uB-lo0fCZy)1Ggh7u$r*7Xmp(+s$?gSHE z;A}5In@k>2W`0e0kcyf*NUgbl^%-2soLP+XVl8hOB)8_?RpMTLp_m)Cex{|@77^*D z;~%(xqMPv%3NY(1->o`PBl$kq+Uw-JKE4wp&T3RID;o{`^ZD((+TUDVXSZ5ZkJgZ< z&dlc)UoC?tAJf9jM!s7Y`=d3ee6)NAXX~qX>-IN)v8hop*&)RCokYam^&O6L7Ld^_ z`Y=`{i!rGFl5u4#aBvZzEae?}yC^7Z ze&jKeu)}gQrRT+Cso~}Ad(zU&JEfKvKj$R=n9DG@+;6tHl5=zg8TX{aRcnJygGT3J zcX8R&?dtiLc6)bn*I2#Z)!m9=R%LPn&P&&@)ka719x>>ar z46|(88_hac{|%o(31=;S8@)Drs=mz(#nK+%b?&DSv|JHno}@+_-c&E5p;+%d(>Do< z9%v==>lixpnnj)FA4P758^pJ7e2$yBv7vg7E~S6@v8QiF`m37Cp*cd&?I$dk8;kor z4u)jzK6c+BdF}m|t(G2ow^u3-ecEc=l^{Z|Bi*pleL;3NBt2g4#>2jS&>0D`p5_j; zonBD68?=pEuw4AfcwO%eYwqTE`}7?RVg@D<1!r$ve`vl?w;Wb)qot9R(q1de}Lf__P_O^Zy@TFgzuGbPcY(WgXut5Z_G5uz4 z>N0f~J!fO0b+$&2{!_=%0E1l!!J!v<8ijqf(Nv=wkcqN?*YjbYlh_LPmn}`hLz9b_ zMTbrnt9M>_^ElhQ?n}@1G`xp>nftNcBXtwrs)SuQJ&I>+y7npcyq6=+Wg9FeeO@~> zJ;IcmTI;6X>C^DM7;-LY8fq5*X6{p)*F}u|Xy_Ye*!J?~fof#%c!13j)yxpbA6*hC zi2kEa&F<|_6ufVOP_X0-Q#4ihXp~+OHnvSPuJ7t}9aXa~^ebY^y)^61sLBZ3`^YN; zTuVWE=b|D6o&0V8#Tv~4KLy3xfBZZe=pqQqRYgnRQKidJ-Y=eWzfxKGd*Ce6@w-&a z!Sbd)4buDavmtTcoNW}(*QT?3ob4$E8|0?O8fJu?!Jn9ZuDY&beU@V9zb!Le13zo`zrB<$DR=aGx`e2~wJ_YPp}L3F z0Z-TrQuC!s@9(-UL&M^k1y^^^p6O62C4WEcxe5Q38oD#ZPD|ytc>ABi91hHIeu4(; zN9?UQ@NDV(0sA7NC9lGz46&SlRGgdT{65Z^zrJaj@#)xu V11zt@z1&mbit1O5W>W_d{{tV?!*&1w literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/createindustry/sounds/diesel_engine_.ogg b/src/main/resources/assets/createindustry/sounds/diesel_engine_.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5254b4fef2e8640d5b1b631910f81ea060d74470 GIT binary patch literal 6817 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 V!1g@c+jc5UQT?jXY|0?we*k|2!?XYZ literal 0 HcmV?d00001 diff --git a/src/main/resources/data/createindustry/recipes/coking/coal_coke.json b/src/main/resources/data/createindustry/recipes/coking/coal_coke.json index 431fba41..8acdd73d 100644 --- a/src/main/resources/data/createindustry/recipes/coking/coal_coke.json +++ b/src/main/resources/data/createindustry/recipes/coking/coal_coke.json @@ -2,14 +2,14 @@ "type": "createindustry:coking", "ingredients": [ { - "count": 20, + "count": 10, "item": "minecraft:coal" } ], - "processingTime": 2000, + "processingTime": 1000, "results": [ { - "count": 20, + "count": 10, "item": "createindustry:coal_coke" } ,