sounds
This commit is contained in:
@@ -54,16 +54,19 @@ public class CreateTFMG
|
|||||||
TFMGCreativeModeTabs.init();
|
TFMGCreativeModeTabs.init();
|
||||||
TFMGFluids.register();
|
TFMGFluids.register();
|
||||||
TFMGPaletteBlocks.register();
|
TFMGPaletteBlocks.register();
|
||||||
|
TFMGSoundEvents.prepare();
|
||||||
|
|
||||||
TFMGColoredFires.register(modEventBus);
|
TFMGColoredFires.register(modEventBus);
|
||||||
TFMGFeatures.register(modEventBus);
|
TFMGFeatures.register(modEventBus);
|
||||||
TFMGRecipeTypes.register(modEventBus);
|
TFMGRecipeTypes.register(modEventBus);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
MinecraftForge.EVENT_BUS.register(this);
|
||||||
modEventBus.addListener(EventPriority.LOWEST, CreateTFMG::gatherData);
|
modEventBus.addListener(EventPriority.LOWEST, CreateTFMG::gatherData);
|
||||||
|
modEventBus.addListener(TFMGSoundEvents::register);
|
||||||
DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> CreateTFMGClient::new);
|
DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> CreateTFMGClient::new);
|
||||||
modEventBus.addListener(this::clientSetup);
|
modEventBus.addListener(this::clientSetup);
|
||||||
MinecraftForge.EVENT_BUS.register(this);
|
|
||||||
}
|
}
|
||||||
@SuppressWarnings("removal")
|
@SuppressWarnings("removal")
|
||||||
public static void gatherData(GatherDataEvent event) {
|
public static void gatherData(GatherDataEvent event) {
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
package com.drmangotea.createindustry.blocks.engines.diesel;
|
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.blocks.engines.diesel.engine_expansion.DieselEngineExpansionBlockEntity;
|
||||||
import com.drmangotea.createindustry.registry.TFMGBlockEntities;
|
|
||||||
import com.drmangotea.createindustry.registry.TFMGBlocks;
|
import com.drmangotea.createindustry.registry.TFMGBlocks;
|
||||||
import com.drmangotea.createindustry.registry.TFMGFluids;
|
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.contraptions.bearing.WindmillBearingBlockEntity;
|
||||||
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
|
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
|
||||||
import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity;
|
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.content.kinetics.steamEngine.SteamEngineValueBox;
|
||||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||||
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
|
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.blockEntity.behaviour.scrollValue.ScrollOptionBehaviour;
|
||||||
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
|
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
|
||||||
import com.simibubi.create.foundation.fluid.SmartFluidTank;
|
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.Axis;
|
||||||
import net.minecraft.core.Direction.AxisDirection;
|
import net.minecraft.core.Direction.AxisDirection;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.NbtUtils;
|
|
||||||
import net.minecraft.network.chat.Component;
|
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.BlockEntity;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
@@ -129,7 +124,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
|
|||||||
super.tick();
|
super.tick();
|
||||||
Direction direction;
|
Direction direction;
|
||||||
|
|
||||||
|
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::makeSound);
|
||||||
|
|
||||||
if(getBlockState().getValue(FACE)==AttachFace.WALL)
|
if(getBlockState().getValue(FACE)==AttachFace.WALL)
|
||||||
expansionPos = this.getBlockPos().relative(getBlockState().getValue(FACING).getOpposite());
|
expansionPos = this.getBlockPos().relative(getBlockState().getValue(FACING).getOpposite());
|
||||||
@@ -206,7 +201,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
|
|||||||
}
|
}
|
||||||
|
|
||||||
shaft.update(worldPosition, conveyedSpeedLevel, engineStrength);
|
shaft.update(worldPosition, conveyedSpeedLevel, engineStrength);
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::makeSound);
|
|
||||||
}
|
}
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
private void makeSound(){
|
private void makeSound(){
|
||||||
@@ -214,8 +209,8 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
|
|||||||
PoweredShaftBlockEntity ste = target.get();
|
PoweredShaftBlockEntity ste = target.get();
|
||||||
if (ste == null)
|
if (ste == null)
|
||||||
return;
|
return;
|
||||||
if (!ste.isPoweredBy(worldPosition) || ste.engineEfficiency == 0)
|
//if (engineStrength == 0)
|
||||||
return;
|
// return;
|
||||||
if (targetAngle == null)
|
if (targetAngle == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -231,13 +226,13 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
|
|||||||
prevAngle = angle;
|
prevAngle = angle;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (angle < 0 && !(prevAngle < -180 && angle > -180)) {
|
if (angle < 0 && !(prevAngle < -180 && angle > -180)) {
|
||||||
prevAngle = angle;
|
prevAngle = angle;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
float pitch = 1.18f - level.random.nextFloat() * .25f;
|
TFMGSoundEvents.ENGINE.playAt(level, worldPosition, 1.0f, 1f, false);
|
||||||
//CISoundEvents.DIESEL_ENGINE_SOUNDS.playAt(level, worldPosition, 0.3f, .2f, false);
|
|
||||||
|
|
||||||
prevAngle = angle;
|
prevAngle = angle;
|
||||||
}
|
}
|
||||||
@@ -392,7 +387,7 @@ public class DieselEngineBlockEntity extends SmartBlockEntity implements IHaveGo
|
|||||||
if (!TFMGBlocks.DIESEL_ENGINE.has(blockState))
|
if (!TFMGBlocks.DIESEL_ENGINE.has(blockState))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
Direction facing = DieselEngineBlock.getFacing(blockState);
|
Direction facing = SteamEngineBlock.getFacing(blockState);
|
||||||
PoweredShaftBlockEntity shaft = getShaft();
|
PoweredShaftBlockEntity shaft = getShaft();
|
||||||
Axis facingAxis = facing.getAxis();
|
Axis facingAxis = facing.getAxis();
|
||||||
Axis axis = Axis.Y;
|
Axis axis = Axis.Y;
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -4,13 +4,12 @@ package com.drmangotea.createindustry.blocks.engines.small;
|
|||||||
import com.drmangotea.createindustry.blocks.engines.small.turbine.TurbineEngineTileEntity;
|
import com.drmangotea.createindustry.blocks.engines.small.turbine.TurbineEngineTileEntity;
|
||||||
import com.drmangotea.createindustry.registry.TFMGBlocks;
|
import com.drmangotea.createindustry.registry.TFMGBlocks;
|
||||||
import com.drmangotea.createindustry.registry.TFMGFluids;
|
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.Create;
|
||||||
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
|
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
|
||||||
import com.simibubi.create.content.equipment.wrench.IWrenchable;
|
import com.simibubi.create.content.equipment.wrench.IWrenchable;
|
||||||
import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity;
|
import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity;
|
||||||
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
|
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.CombinedTankWrapper;
|
||||||
import com.simibubi.create.foundation.fluid.SmartFluidTank;
|
import com.simibubi.create.foundation.fluid.SmartFluidTank;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
@@ -444,7 +443,7 @@ public void write(CompoundTag compound, boolean clientPacket) {
|
|||||||
soundTimer++;
|
soundTimer++;
|
||||||
|
|
||||||
// if(!isExhaustTankFull()) {
|
// if(!isExhaustTankFull()) {
|
||||||
if (soundTimer >= ((16-signal)/2)+1) {
|
if (soundTimer >= ((16-signal)/0.8)+1) {
|
||||||
if(signal!=0&&
|
if(signal!=0&&
|
||||||
hasBackPart()&&
|
hasBackPart()&&
|
||||||
tankInventory.getFluidAmount()!=0 &&
|
tankInventory.getFluidAmount()!=0 &&
|
||||||
@@ -543,11 +542,11 @@ public void write(CompoundTag compound, boolean clientPacket) {
|
|||||||
private void makeSound(){
|
private void makeSound(){
|
||||||
soundTimer=0;
|
soundTimer=0;
|
||||||
if(this instanceof TurbineEngineTileEntity){
|
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);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,14 +187,14 @@ public class CokeOvenBlockEntity extends TFMGMachineBlockEntity implements IWren
|
|||||||
if(lastRecipe!=null
|
if(lastRecipe!=null
|
||||||
&&isController
|
&&isController
|
||||||
&&timer==-1
|
&&timer==-1
|
||||||
&&inputInventory.getItem(0).getCount()>=20&&
|
&&inputInventory.getItem(0).getCount()>=10&&
|
||||||
(tank2.getPrimaryHandler().getFluidAmount()+CARBON_DIOXIDE_PRODUCTION)<=tank2.getPrimaryHandler().getCapacity()&&
|
(tank2.getPrimaryHandler().getFluidAmount()+CARBON_DIOXIDE_PRODUCTION)<=tank2.getPrimaryHandler().getCapacity()&&
|
||||||
(tank1.getPrimaryHandler().getFluidAmount()+lastRecipe.getFluidResults().get(0).getAmount())<=tank1.getPrimaryHandler().getCapacity(
|
(tank1.getPrimaryHandler().getFluidAmount()+lastRecipe.getFluidResults().get(0).getAmount())<=tank1.getPrimaryHandler().getCapacity(
|
||||||
|
|
||||||
|
|
||||||
)){
|
)){
|
||||||
timer = lastRecipe.getProcessingDuration();
|
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)
|
// if(lastRecipe != null)
|
||||||
|
|||||||
@@ -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<ResourceLocation, TFMGSoundEvents.SoundEntry> 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<SoundEvent> event, float volume, float pitch) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class SoundEntryBuilder {
|
||||||
|
|
||||||
|
protected ResourceLocation id;
|
||||||
|
protected String subtitle = "unregistered";
|
||||||
|
protected SoundSource category = SoundSource.BLOCKS;
|
||||||
|
protected List<TFMGSoundEvents.ConfiguredSoundEvent> wrappedEvents;
|
||||||
|
protected List<ResourceLocation> 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<SoundEvent> 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<SoundEvent> 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<TFMGSoundEvents.ConfiguredSoundEvent> wrappedEvents;
|
||||||
|
private List<TFMGSoundEvents.WrappedSoundEntry.CompiledSoundEvent> compiledEvents;
|
||||||
|
|
||||||
|
public WrappedSoundEntry(ResourceLocation id, String subtitle,
|
||||||
|
List<TFMGSoundEvents.ConfiguredSoundEvent> 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<SoundEvent> event = RegistryObject.create(location, ForgeRegistries.SOUND_EVENTS);
|
||||||
|
compiledEvents.add(new TFMGSoundEvents.WrappedSoundEntry.CompiledSoundEvent(event, wrapped.volume(), wrapped.pitch()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void register(RegisterEvent.RegisterHelper<SoundEvent> 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<SoundEvent> event, float volume, float pitch) {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class CustomSoundEntry extends TFMGSoundEvents.SoundEntry {
|
||||||
|
|
||||||
|
protected List<ResourceLocation> variants;
|
||||||
|
protected RegistryObject<SoundEvent> event;
|
||||||
|
|
||||||
|
public CustomSoundEntry(ResourceLocation id, List<ResourceLocation> 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<SoundEvent> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
13
src/main/resources/assets/createindustry/sounds.json
Normal file
13
src/main/resources/assets/createindustry/sounds.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
|
||||||
|
"diesel_engine": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "createindustry:diesel_engine",
|
||||||
|
"type": "file",
|
||||||
|
"attenuation_distance": 16
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"subtitle": "createindustry.subtitle.engine_sounds"
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
@@ -2,14 +2,14 @@
|
|||||||
"type": "createindustry:coking",
|
"type": "createindustry:coking",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"count": 20,
|
"count": 10,
|
||||||
"item": "minecraft:coal"
|
"item": "minecraft:coal"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"processingTime": 2000,
|
"processingTime": 1000,
|
||||||
"results": [
|
"results": [
|
||||||
{
|
{
|
||||||
"count": 20,
|
"count": 10,
|
||||||
"item": "createindustry:coal_coke"
|
"item": "createindustry:coal_coke"
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
|
|||||||
Reference in New Issue
Block a user