From f03e907ac73d92bfaf5948e1cae7848675439497 Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Wed, 10 Mar 2021 18:21:44 +0100 Subject: Refactor World Events World events have way to many parameters, so the code gets unreadable, this commit fixes that behavior. --- .../interfaces/tileentity/IEnergyConnected.java | 7 +- .../api/metatileentity/MetaPipeEntity.java | 8 +- .../implementations/GT_MetaPipeEntity_Fluid.java | 17 ++- .../GT_MetaTileEntity_BasicMachine_Bronze.java | 17 ++- .../GT_MetaTileEntity_BasicMachine_GT_Recipe.java | 25 ++-- .../GT_MetaTileEntity_Hatch_Muffler.java | 21 ++- src/main/java/gregtech/api/util/GT_FoodStat.java | 7 +- .../gregtech/api/util/PositionedWorldEvent.java | 144 +++++++++++++++++++++ 8 files changed, 216 insertions(+), 30 deletions(-) create mode 100644 src/main/java/gregtech/api/util/PositionedWorldEvent.java (limited to 'src/main/java/gregtech/api') diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java index 47bec844ee..66b0e5b27c 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java @@ -3,9 +3,11 @@ package gregtech.api.interfaces.tileentity; import cofh.api.energy.IEnergyReceiver; import gregtech.GT_Mod; import gregtech.api.GregTech_API; +import gregtech.api.util.PositionedWorldEvent; import gregtech.api.util.GT_Utility; import gregtech.common.GT_Pollution; import ic2.api.energy.tile.IEnergySink; +import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -112,7 +114,10 @@ public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAnd if (GregTech_API.sMachineExplosions) if (GT_Mod.gregtechproxy.mPollution) GT_Pollution.addPollution(tWorld.getChunkFromBlockCoords(tX, tZ), 100000); - tWorld.createExplosion(null, tX + 0.5, tY + 0.5, tZ + 0.5, tStrength, true); + + PositionedWorldEvent event = new PositionedWorldEvent<>(tWorld); + event.setPosition(tX + 0.5, tY + 0.5, tZ + 0.5); + event.createExplosion(tStrength, true); } } } diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java index 31ec73d04b..8fc06b3dc4 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java @@ -9,6 +9,7 @@ import gregtech.api.interfaces.tileentity.IColoredTileEntity; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.objects.GT_ItemStack; +import gregtech.api.util.PositionedWorldEvent; import gregtech.api.util.GT_Config; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_LanguageManager; @@ -697,8 +698,11 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { int tX = getBaseMetaTileEntity().getXCoord(), tY = getBaseMetaTileEntity().getYCoord(), tZ = getBaseMetaTileEntity().getZCoord(); World tWorld = getBaseMetaTileEntity().getWorld(); tWorld.setBlock(tX, tY, tZ, Blocks.air); - if (GregTech_API.sMachineExplosions) - tWorld.createExplosion(null, tX + 0.5, tY + 0.5, tZ + 0.5, tStrength, true); + if (GregTech_API.sMachineExplosions){ + PositionedWorldEvent event = new PositionedWorldEvent<>(tWorld); + event.setPosition(tX + 0.5, tY + 0.5, tZ + 0.5); + event.createExplosion(tStrength, true); + } } @Override diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java index e472305a36..dd207a1b39 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java @@ -17,6 +17,7 @@ import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Utility; +import gregtech.api.util.PositionedWorldEvent; import gregtech.common.GT_Client; import gregtech.common.covers.GT_Cover_Drain; import gregtech.common.covers.GT_Cover_FluidRegulator; @@ -444,8 +445,20 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { super.doSound(aIndex, aX, aY, aZ); if (aIndex == 9) { GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(4), 5, 1.0F, aX, aY, aZ); - for (byte i = 0; i < 6; i++) - getBaseMetaTileEntity().getWorld().spawnParticle("largesmoke", aX - 0.5 + XSTR_INSTANCE.nextFloat(), aY - 0.5 + XSTR_INSTANCE.nextFloat(), aZ - 0.5 + XSTR_INSTANCE.nextFloat(), ForgeDirection.getOrientation(i).offsetX / 5.0, ForgeDirection.getOrientation(i).offsetY / 5.0, ForgeDirection.getOrientation(i).offsetZ / 5.0); + PositionedWorldEvent events = new PositionedWorldEvent<>(getBaseMetaTileEntity().getWorld(), "largesmoke"); + + for (int i = 0; i < 6; i++){ + events.setPosition( + aX - 0.5 + XSTR_INSTANCE.nextFloat(), + aY - 0.5 + XSTR_INSTANCE.nextFloat(), + aZ - 0.5 + XSTR_INSTANCE.nextFloat() + ); + events.spawnParticle( + ForgeDirection.getOrientation(i).offsetX / 5.0, + ForgeDirection.getOrientation(i).offsetY / 5.0, + ForgeDirection.getOrientation(i).offsetZ / 5.0 + ); + } } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java index 23aa69213c..50b942d294 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java @@ -8,6 +8,7 @@ import gregtech.api.objects.GT_ItemStack; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Utility; +import gregtech.api.util.PositionedWorldEvent; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; @@ -153,8 +154,20 @@ public abstract class GT_MetaTileEntity_BasicMachine_Bronze extends GT_MetaTileE super.doSound(aIndex, aX, aY, aZ); if (aIndex == 9) { GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(4), 5, 1.0F, aX, aY, aZ); - for (int l = 0; l < 8; ++l) - getBaseMetaTileEntity().getWorld().spawnParticle("largesmoke", aX - 0.5 + XSTR_INSTANCE.nextFloat(), aY - 0.5 + XSTR_INSTANCE.nextFloat(), aZ - 0.5 + XSTR_INSTANCE.nextFloat(), ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetX / 5.0, ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetY / 5.0, ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetZ / 5.0); + PositionedWorldEvent events = new PositionedWorldEvent<>(getBaseMetaTileEntity().getWorld(), "largesmoke"); + + for (int i = 0; i < 8; i++){ + events.setPosition( + aX - 0.5 + XSTR_INSTANCE.nextFloat(), + aY - 0.5 + XSTR_INSTANCE.nextFloat(), + aZ - 0.5 + XSTR_INSTANCE.nextFloat() + ); + events.spawnParticle( + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetX / 5.0, + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetY / 5.0, + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetZ / 5.0 + ); + } } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java index 147973b183..759c6c4c02 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java @@ -1,11 +1,7 @@ package gregtech.api.metatileentity.implementations; import cpw.mods.fml.common.Loader; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Tier; +import gregtech.api.enums.*; import gregtech.api.gui.GT_Container_BasicMachine; import gregtech.api.gui.GT_GUIContainer_BasicMachine; import gregtech.api.interfaces.ITexture; @@ -16,6 +12,7 @@ import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; +import gregtech.api.util.PositionedWorldEvent; import ic2.core.Ic2Items; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Blocks; @@ -26,10 +23,7 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.Locale; import java.util.Random; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.GT_Values.W; -import static gregtech.api.enums.GT_Values.ticksBetweenSounds; +import static gregtech.api.enums.GT_Values.*; /** * NEVER INCLUDE THIS FILE IN YOUR MOD!!! @@ -806,12 +800,15 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_ break; case 1: if (aBaseMetaTileEntity.getFrontFacing() != 1 && aBaseMetaTileEntity.getCoverIDAtSide((byte) 1) == 0 && !aBaseMetaTileEntity.getOpacityAtSide((byte) 1)) { - Random tRandom = aBaseMetaTileEntity.getWorld().rand; - aBaseMetaTileEntity.getWorld().spawnParticle( - "smoke", aBaseMetaTileEntity.getXCoord() + 0.8F - tRandom.nextFloat() * 0.6F, - aBaseMetaTileEntity.getYCoord() + 0.9F + tRandom.nextFloat() * 0.2F, - aBaseMetaTileEntity.getZCoord() + 0.8F - tRandom.nextFloat() * 0.6F, 0.0D, 0.0D, 0.0D + PositionedWorldEvent events = new PositionedWorldEvent<>(aBaseMetaTileEntity.getWorld(), "smoke"); + Random tRandom = events.getWorld().rand; + + events.setPosition( + aBaseMetaTileEntity.getXCoord() + 0.8F - tRandom.nextFloat() * 0.6F, + aBaseMetaTileEntity.getYCoord() + 0.9F + tRandom.nextFloat() * 0.2F, + aBaseMetaTileEntity.getZCoord() + 0.8F - tRandom.nextFloat() * 0.6F ); + events.spawnParticle(0.0D, 0.0D, 0.0D); } break; } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java index e651df066b..d8b1655b43 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java @@ -9,6 +9,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.PositionedWorldEvent; import gregtech.common.GT_Pollution; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -140,14 +141,20 @@ public class GT_MetaTileEntity_Hatch_Muffler extends GT_MetaTileEntity_Hatch { zSpd = aDir.offsetZ * (0.1F + 0.2F * XSTR_INSTANCE.nextFloat()); } - if (chk1) - aWorld.spawnParticle(name, xPos + ran1 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F, xSpd, ySpd, zSpd); + PositionedWorldEvent events = new PositionedWorldEvent<>(aWorld, name); - if (chk2) - aWorld.spawnParticle(name, xPos + ran2 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F, xSpd, ySpd, zSpd); - - if (chk3) - aWorld.spawnParticle(name, xPos + ran3 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F, xSpd, ySpd, zSpd); + if (chk1) { + events.setPosition(xPos + ran1 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F); + events.spawnParticle(xSpd, ySpd, zSpd); + } + if (chk2) { + events.setPosition(xPos + ran2 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F); + events.spawnParticle(xSpd, ySpd, zSpd); + } + if (chk3) { + events.setPosition(xPos + ran3 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F); + events.spawnParticle(xSpd, ySpd, zSpd); + } } public int calculatePollutionReduction(int aPollution) { diff --git a/src/main/java/gregtech/api/util/GT_FoodStat.java b/src/main/java/gregtech/api/util/GT_FoodStat.java index d0fe9bdbf4..da3b220845 100644 --- a/src/main/java/gregtech/api/util/GT_FoodStat.java +++ b/src/main/java/gregtech/api/util/GT_FoodStat.java @@ -68,7 +68,8 @@ public class GT_FoodStat implements IFoodStat { ItemStack tStack = GT_OreDictUnificator.get(GT_Utility.copy(mEmptyContainer)); if (tStack != null && !aPlayer.inventory.addItemStackToInventory(tStack)) aPlayer.dropPlayerItemWithRandomChoice(tStack, true); - aPlayer.worldObj.playSoundAtEntity(aPlayer, "random.burp", 0.5F, aPlayer.worldObj.rand.nextFloat() * 0.1F + 0.9F); + PositionedWorldEvent event = new PositionedWorldEvent<>(aPlayer.worldObj, "random.burp"); + event.playSoundAtEntity(aPlayer,0.5F, aPlayer.worldObj.rand.nextFloat() * 0.1F + 0.9F); if (!aPlayer.worldObj.isRemote) { if (mMilk) { aPlayer.curePotionEffects(new ItemStack(Items.milk_bucket, 1, 0)); @@ -79,7 +80,9 @@ public class GT_FoodStat implements IFoodStat { } } if (mExplosive) { - aPlayer.worldObj.newExplosion(aPlayer, aPlayer.posX, aPlayer.posY, aPlayer.posZ, 4, true, true); + event.setThing(aPlayer); + event.setPosition(aPlayer.posX, aPlayer.posY, aPlayer.posZ); + event.newExplosion(4,true, true); aPlayer.attackEntityFrom(GT_DamageSources.getExplodingDamage(), Float.MAX_VALUE); } } diff --git a/src/main/java/gregtech/api/util/PositionedWorldEvent.java b/src/main/java/gregtech/api/util/PositionedWorldEvent.java new file mode 100644 index 0000000000..ce5543b320 --- /dev/null +++ b/src/main/java/gregtech/api/util/PositionedWorldEvent.java @@ -0,0 +1,144 @@ +package gregtech.api.util; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +@SuppressWarnings("unused") +public class PositionedWorldEvent { + + public PositionedWorldEvent() {} + + public PositionedWorldEvent(World world) { + this.world = world; + } + + public PositionedWorldEvent(Vec3 position) { + this.position = position; + } + + public PositionedWorldEvent(T thing) { + this.thing = thing; + } + + public PositionedWorldEvent(World world, T thing) { + this(world); + this.thing = thing; + } + + public PositionedWorldEvent(World world, Vec3 position) { + this(world); + this.position = position; + } + + public PositionedWorldEvent(Vec3 position, T thing) { + this(position); + this.thing = thing; + } + + public PositionedWorldEvent(T thing, Vec3 position) { + this(position, thing); + } + + public PositionedWorldEvent(World world, Vec3 position, T thing) { + this(world, position); + this.thing = thing; + } + + public PositionedWorldEvent(World world, T thing, Vec3 position) { + this(world, position, thing); + } + + private World world; + private Vec3 position; + private T thing; + + public World getWorld() { + return world; + } + + public void setWorld(World world) { + this.world = world; + } + + public Vec3 getPosition() { + return position; + } + + public void setPosition(Vec3 position) { + this.position = position; + } + + public void setPosition(double x, double y, double z) { + this.position = Vec3.createVectorHelper(x, y, z); + } + + public T getThing() { + return thing; + } + + public void setThing(T thing) { + this.thing = thing; + } + + public void spawnParticle(double motionX, double motionY, double motionZ) { + if (position == null || !(thing instanceof String) || world == null) + return; + + world.spawnParticle((String) thing, position.xCoord, position.yCoord, position.zCoord, motionX, motionY, motionZ); + } + + public void playSoundEffect(float volume, float pitch) { + if (position == null || !(thing instanceof String) || world == null) + return; + + world.playSoundEffect(position.xCoord, position.yCoord, position.zCoord, (String) thing, volume, pitch); + } + + public void playRecord() { + if (position == null || !(thing instanceof String) || world == null) + return; + + world.playRecord((String) thing, (int) position.xCoord, (int) position.yCoord, (int) position.zCoord); + } + + public void playSound(float volume, float pitch, boolean proximity) { + if (position == null || !(thing instanceof String) || world == null) + return; + + world.playSound(position.xCoord, position.yCoord, position.zCoord, (String) thing, volume, pitch, proximity); + } + + public void createExplosion(float strength, boolean isSmoking) { + newExplosion(strength, false, isSmoking); + } + + public void newExplosion(float strength, boolean isFlaming, boolean isSmoking) { + if (position == null || world == null) + return; + + world.newExplosion((Entity) thing, position.xCoord, position.yCoord, position.zCoord, strength, isFlaming, isSmoking); + } + + public boolean extinguishFire(int side) { + if (position == null || world == null) + return false; + + return world.extinguishFire((EntityPlayer) thing, (int) position.xCoord, (int) position.yCoord, (int) position.zCoord, side); + } + + public void playSoundAtEntity(Entity entity, float volume, float pitch) { + if (!(thing instanceof String)) { + return; + } + world.playSoundAtEntity(entity, (String) thing, volume, pitch); + } + + public void playSoundToNearExcept(EntityPlayer player, float volume, float pitch) { + if (!(thing instanceof String)) { + return; + } + world.playSoundToNearExcept(player, (String) thing, volume, pitch); + } +} \ No newline at end of file -- cgit From d006460e3e3f2221b82c03b02d282d5ed6767095 Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Wed, 10 Mar 2021 19:47:29 +0100 Subject: Implemented Requests --- .../interfaces/tileentity/IEnergyConnected.java | 4 +-- .../api/metatileentity/MetaPipeEntity.java | 4 +-- .../implementations/GT_MetaPipeEntity_Fluid.java | 25 ++++++++--------- .../GT_MetaTileEntity_BasicMachine_Bronze.java | 24 +++++++--------- .../GT_MetaTileEntity_BasicMachine_GT_Recipe.java | 18 ++++++------ .../GT_MetaTileEntity_Hatch_Muffler.java | 12 ++++---- src/main/java/gregtech/api/util/GT_FoodStat.java | 6 ++-- .../gregtech/api/util/PositionedWorldEvent.java | 32 +++++++++++++++++++--- 8 files changed, 71 insertions(+), 54 deletions(-) (limited to 'src/main/java/gregtech/api') diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java index 66b0e5b27c..4487ec57d6 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java @@ -116,8 +116,8 @@ public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAnd GT_Pollution.addPollution(tWorld.getChunkFromBlockCoords(tX, tZ), 100000); PositionedWorldEvent event = new PositionedWorldEvent<>(tWorld); - event.setPosition(tX + 0.5, tY + 0.5, tZ + 0.5); - event.createExplosion(tStrength, true); + event.setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) + .createExplosion(tStrength, true); } } } diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java index 8fc06b3dc4..879982e995 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java @@ -700,8 +700,8 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { tWorld.setBlock(tX, tY, tZ, Blocks.air); if (GregTech_API.sMachineExplosions){ PositionedWorldEvent event = new PositionedWorldEvent<>(tWorld); - event.setPosition(tX + 0.5, tY + 0.5, tZ + 0.5); - event.createExplosion(tStrength, true); + event.setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) + .createExplosion(tStrength, true); } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java index dd207a1b39..8e0c010995 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java @@ -445,20 +445,17 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { super.doSound(aIndex, aX, aY, aZ); if (aIndex == 9) { GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(4), 5, 1.0F, aX, aY, aZ); - PositionedWorldEvent events = new PositionedWorldEvent<>(getBaseMetaTileEntity().getWorld(), "largesmoke"); - - for (int i = 0; i < 6; i++){ - events.setPosition( - aX - 0.5 + XSTR_INSTANCE.nextFloat(), - aY - 0.5 + XSTR_INSTANCE.nextFloat(), - aZ - 0.5 + XSTR_INSTANCE.nextFloat() - ); - events.spawnParticle( - ForgeDirection.getOrientation(i).offsetX / 5.0, - ForgeDirection.getOrientation(i).offsetY / 5.0, - ForgeDirection.getOrientation(i).offsetZ / 5.0 - ); - } + + new PositionedWorldEvent<>(getBaseMetaTileEntity().getWorld(), "largesmoke") + .times(6, (x, i) -> x.setPosition( + aX - 0.5 + XSTR_INSTANCE.nextFloat(), + aY - 0.5 + XSTR_INSTANCE.nextFloat(), + aZ - 0.5 + XSTR_INSTANCE.nextFloat() + ).spawnParticle( + ForgeDirection.getOrientation(i).offsetX / 5.0, + ForgeDirection.getOrientation(i).offsetY / 5.0, + ForgeDirection.getOrientation(i).offsetZ / 5.0 + )); } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java index 50b942d294..7d8d6dbba0 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java @@ -154,20 +154,16 @@ public abstract class GT_MetaTileEntity_BasicMachine_Bronze extends GT_MetaTileE super.doSound(aIndex, aX, aY, aZ); if (aIndex == 9) { GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(4), 5, 1.0F, aX, aY, aZ); - PositionedWorldEvent events = new PositionedWorldEvent<>(getBaseMetaTileEntity().getWorld(), "largesmoke"); - - for (int i = 0; i < 8; i++){ - events.setPosition( - aX - 0.5 + XSTR_INSTANCE.nextFloat(), - aY - 0.5 + XSTR_INSTANCE.nextFloat(), - aZ - 0.5 + XSTR_INSTANCE.nextFloat() - ); - events.spawnParticle( - ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetX / 5.0, - ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetY / 5.0, - ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetZ / 5.0 - ); - } + new PositionedWorldEvent<>(getBaseMetaTileEntity().getWorld(), "largesmoke") + .times(8, x -> x.setPosition( + aX - 0.5 + XSTR_INSTANCE.nextFloat(), + aY - 0.5 + XSTR_INSTANCE.nextFloat(), + aZ - 0.5 + XSTR_INSTANCE.nextFloat() + ).spawnParticle( + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetX / 5.0, + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetY / 5.0, + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetZ / 5.0 + )); } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java index 759c6c4c02..c2e4fc441c 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java @@ -800,15 +800,15 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_ break; case 1: if (aBaseMetaTileEntity.getFrontFacing() != 1 && aBaseMetaTileEntity.getCoverIDAtSide((byte) 1) == 0 && !aBaseMetaTileEntity.getOpacityAtSide((byte) 1)) { - PositionedWorldEvent events = new PositionedWorldEvent<>(aBaseMetaTileEntity.getWorld(), "smoke"); - Random tRandom = events.getWorld().rand; - - events.setPosition( - aBaseMetaTileEntity.getXCoord() + 0.8F - tRandom.nextFloat() * 0.6F, - aBaseMetaTileEntity.getYCoord() + 0.9F + tRandom.nextFloat() * 0.2F, - aBaseMetaTileEntity.getZCoord() + 0.8F - tRandom.nextFloat() * 0.6F - ); - events.spawnParticle(0.0D, 0.0D, 0.0D); + + Random tRandom = aBaseMetaTileEntity.getWorld().rand; + new PositionedWorldEvent<>(aBaseMetaTileEntity.getWorld(), "smoke") + .setPosition( + aBaseMetaTileEntity.getXCoord() + 0.8F - tRandom.nextFloat() * 0.6F, + aBaseMetaTileEntity.getYCoord() + 0.9F + tRandom.nextFloat() * 0.2F, + aBaseMetaTileEntity.getZCoord() + 0.8F - tRandom.nextFloat() * 0.6F + ) + .spawnParticle(0.0D, 0.0D, 0.0D); } break; } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java index d8b1655b43..44567c96eb 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java @@ -144,16 +144,16 @@ public class GT_MetaTileEntity_Hatch_Muffler extends GT_MetaTileEntity_Hatch { PositionedWorldEvent events = new PositionedWorldEvent<>(aWorld, name); if (chk1) { - events.setPosition(xPos + ran1 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F); - events.spawnParticle(xSpd, ySpd, zSpd); + events.setPosition(xPos + ran1 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F) + .spawnParticle(xSpd, ySpd, zSpd); } if (chk2) { - events.setPosition(xPos + ran2 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F); - events.spawnParticle(xSpd, ySpd, zSpd); + events.setPosition(xPos + ran2 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F) + .spawnParticle(xSpd, ySpd, zSpd); } if (chk3) { - events.setPosition(xPos + ran3 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F); - events.spawnParticle(xSpd, ySpd, zSpd); + events.setPosition(xPos + ran3 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F) + .spawnParticle(xSpd, ySpd, zSpd); } } diff --git a/src/main/java/gregtech/api/util/GT_FoodStat.java b/src/main/java/gregtech/api/util/GT_FoodStat.java index da3b220845..96345ef199 100644 --- a/src/main/java/gregtech/api/util/GT_FoodStat.java +++ b/src/main/java/gregtech/api/util/GT_FoodStat.java @@ -80,9 +80,9 @@ public class GT_FoodStat implements IFoodStat { } } if (mExplosive) { - event.setThing(aPlayer); - event.setPosition(aPlayer.posX, aPlayer.posY, aPlayer.posZ); - event.newExplosion(4,true, true); + event.setThing(aPlayer) + .setPosition(aPlayer.posX, aPlayer.posY, aPlayer.posZ) + .newExplosion(4,true, true); aPlayer.attackEntityFrom(GT_DamageSources.getExplodingDamage(), Float.MAX_VALUE); } } diff --git a/src/main/java/gregtech/api/util/PositionedWorldEvent.java b/src/main/java/gregtech/api/util/PositionedWorldEvent.java index ce5543b320..e8518b5444 100644 --- a/src/main/java/gregtech/api/util/PositionedWorldEvent.java +++ b/src/main/java/gregtech/api/util/PositionedWorldEvent.java @@ -5,6 +5,12 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import java.util.List; +import java.util.Objects; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Supplier; + @SuppressWarnings("unused") public class PositionedWorldEvent { @@ -58,28 +64,32 @@ public class PositionedWorldEvent { return world; } - public void setWorld(World world) { + public PositionedWorldEvent setWorld(World world) { this.world = world; + return this; } public Vec3 getPosition() { return position; } - public void setPosition(Vec3 position) { + public PositionedWorldEvent setPosition(Vec3 position) { this.position = position; + return this; } - public void setPosition(double x, double y, double z) { + public PositionedWorldEvent setPosition(double x, double y, double z) { this.position = Vec3.createVectorHelper(x, y, z); + return this; } public T getThing() { return thing; } - public void setThing(T thing) { + public PositionedWorldEvent setThing(T thing) { this.thing = thing; + return this; } public void spawnParticle(double motionX, double motionY, double motionZ) { @@ -141,4 +151,18 @@ public class PositionedWorldEvent { } world.playSoundToNearExcept(player, (String) thing, volume, pitch); } + + public void times(int times, Consumer> action) { + Objects.requireNonNull(action); + for (int i = 0; i < times; i++) { + action.accept(this); + } + } + + public void times(int times, BiConsumer, Integer> action) { + Objects.requireNonNull(action); + for (int i = 0; i < times; i++) { + action.accept(this, i); + } + } } \ No newline at end of file -- cgit From 5977a6f5327eb0536478d240f4a835ddaecdb517 Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Wed, 10 Mar 2021 19:59:20 +0100 Subject: Added missing --- .../java/gregtech/api/interfaces/tileentity/IEnergyConnected.java | 6 +++--- src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/main/java/gregtech/api') diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java index 4487ec57d6..813f31e62f 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java @@ -115,9 +115,9 @@ public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAnd if (GT_Mod.gregtechproxy.mPollution) GT_Pollution.addPollution(tWorld.getChunkFromBlockCoords(tX, tZ), 100000); - PositionedWorldEvent event = new PositionedWorldEvent<>(tWorld); - event.setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) - .createExplosion(tStrength, true); + new PositionedWorldEvent<>(tWorld) + .setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) + .createExplosion(tStrength, true); } } } diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java index 879982e995..4459b2203a 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java @@ -699,8 +699,8 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { World tWorld = getBaseMetaTileEntity().getWorld(); tWorld.setBlock(tX, tY, tZ, Blocks.air); if (GregTech_API.sMachineExplosions){ - PositionedWorldEvent event = new PositionedWorldEvent<>(tWorld); - event.setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) + new PositionedWorldEvent<>(tWorld) + .setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) .createExplosion(tStrength, true); } } -- cgit From f57bb28cca2135e12d9917938f2113b19f7c1ddd Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Wed, 10 Mar 2021 21:27:48 +0100 Subject: Added a few safety measurements --- .../gregtech/api/util/PositionedWorldEvent.java | 34 ++++++++++++---------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'src/main/java/gregtech/api') diff --git a/src/main/java/gregtech/api/util/PositionedWorldEvent.java b/src/main/java/gregtech/api/util/PositionedWorldEvent.java index e8518b5444..101e4d3c72 100644 --- a/src/main/java/gregtech/api/util/PositionedWorldEvent.java +++ b/src/main/java/gregtech/api/util/PositionedWorldEvent.java @@ -5,11 +5,9 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import java.util.List; import java.util.Objects; import java.util.function.BiConsumer; import java.util.function.Consumer; -import java.util.function.Supplier; @SuppressWarnings("unused") public class PositionedWorldEvent { @@ -94,28 +92,31 @@ public class PositionedWorldEvent { public void spawnParticle(double motionX, double motionY, double motionZ) { if (position == null || !(thing instanceof String) || world == null) - return; + throw new IllegalStateException("Position and world must be set, thing must be a string indicating the Particle to be spawned"); world.spawnParticle((String) thing, position.xCoord, position.yCoord, position.zCoord, motionX, motionY, motionZ); } public void playSoundEffect(float volume, float pitch) { if (position == null || !(thing instanceof String) || world == null) - return; + throw new IllegalStateException("Position and world must be set, thing must be a string indicating the SoundEffect to be spawned"); world.playSoundEffect(position.xCoord, position.yCoord, position.zCoord, (String) thing, volume, pitch); } + /** + * Positional Data is rounded down due to this targeting a block. + */ public void playRecord() { if (position == null || !(thing instanceof String) || world == null) - return; + throw new IllegalStateException("Position and world must be set, thing must be a string indicating the Record to be spawned"); world.playRecord((String) thing, (int) position.xCoord, (int) position.yCoord, (int) position.zCoord); } public void playSound(float volume, float pitch, boolean proximity) { if (position == null || !(thing instanceof String) || world == null) - return; + throw new IllegalStateException("Position and world must be set, thing must be a string indicating the Sound to be spawned"); world.playSound(position.xCoord, position.yCoord, position.zCoord, (String) thing, volume, pitch, proximity); } @@ -125,30 +126,33 @@ public class PositionedWorldEvent { } public void newExplosion(float strength, boolean isFlaming, boolean isSmoking) { - if (position == null || world == null) - return; + if (position == null || world == null || thing != null && !(thing instanceof Entity)) + throw new IllegalStateException("Position and world must be set, thing must either be null or an Entity"); world.newExplosion((Entity) thing, position.xCoord, position.yCoord, position.zCoord, strength, isFlaming, isSmoking); } + /** + * Positional Data is rounded down due to this targeting a block. + */ public boolean extinguishFire(int side) { if (position == null || world == null) - return false; + throw new IllegalStateException("Position and world must be set"); return world.extinguishFire((EntityPlayer) thing, (int) position.xCoord, (int) position.yCoord, (int) position.zCoord, side); } public void playSoundAtEntity(Entity entity, float volume, float pitch) { - if (!(thing instanceof String)) { - return; - } + if (world == null || !(thing instanceof String)) + throw new IllegalStateException("World must be set, string indicating the Sound to be spawned"); + world.playSoundAtEntity(entity, (String) thing, volume, pitch); } public void playSoundToNearExcept(EntityPlayer player, float volume, float pitch) { - if (!(thing instanceof String)) { - return; - } + if (world == null || !(thing instanceof String)) + throw new IllegalStateException("World must be set, string indicating the Sound to be spawned"); + world.playSoundToNearExcept(player, (String) thing, volume, pitch); } -- cgit From e735bc65230bdbf1324d3bd2c9b8602d43bb9050 Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Wed, 10 Mar 2021 21:32:12 +0100 Subject: Missed one --- src/main/java/gregtech/api/util/PositionedWorldEvent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java/gregtech/api') diff --git a/src/main/java/gregtech/api/util/PositionedWorldEvent.java b/src/main/java/gregtech/api/util/PositionedWorldEvent.java index 101e4d3c72..b615daabf5 100644 --- a/src/main/java/gregtech/api/util/PositionedWorldEvent.java +++ b/src/main/java/gregtech/api/util/PositionedWorldEvent.java @@ -136,8 +136,8 @@ public class PositionedWorldEvent { * Positional Data is rounded down due to this targeting a block. */ public boolean extinguishFire(int side) { - if (position == null || world == null) - throw new IllegalStateException("Position and world must be set"); + if (position == null || world == null || !(thing instanceof EntityPlayer)) + throw new IllegalStateException("Position and world must be set, thing must be a EntityPlayer"); return world.extinguishFire((EntityPlayer) thing, (int) position.xCoord, (int) position.yCoord, (int) position.zCoord, side); } -- cgit From b359d79f77bb3efd6433c845af0a948975651b9a Mon Sep 17 00:00:00 2001 From: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> Date: Thu, 11 Mar 2021 17:43:44 +0100 Subject: Implemented Builder Pattern --- .../interfaces/tileentity/IEnergyConnected.java | 11 +- .../api/metatileentity/MetaPipeEntity.java | 11 +- .../implementations/GT_MetaPipeEntity_Fluid.java | 21 +- .../GT_MetaTileEntity_BasicMachine_Bronze.java | 28 +- .../GT_MetaTileEntity_BasicMachine_GT_Recipe.java | 19 +- .../GT_MetaTileEntity_Hatch_Muffler.java | 23 +- src/main/java/gregtech/api/util/GT_FoodStat.java | 22 +- .../gregtech/api/util/PositionedWorldEvent.java | 172 ------ .../api/util/WorldSpawnedEventBuilder.java | 602 +++++++++++++++++++++ 9 files changed, 688 insertions(+), 221 deletions(-) delete mode 100644 src/main/java/gregtech/api/util/PositionedWorldEvent.java create mode 100644 src/main/java/gregtech/api/util/WorldSpawnedEventBuilder.java (limited to 'src/main/java/gregtech/api') diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java index 813f31e62f..3a8bbdfd70 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java @@ -3,11 +3,10 @@ package gregtech.api.interfaces.tileentity; import cofh.api.energy.IEnergyReceiver; import gregtech.GT_Mod; import gregtech.api.GregTech_API; -import gregtech.api.util.PositionedWorldEvent; +import gregtech.api.util.WorldSpawnedEventBuilder; import gregtech.api.util.GT_Utility; import gregtech.common.GT_Pollution; import ic2.api.energy.tile.IEnergySink; -import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -115,9 +114,11 @@ public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAnd if (GT_Mod.gregtechproxy.mPollution) GT_Pollution.addPollution(tWorld.getChunkFromBlockCoords(tX, tZ), 100000); - new PositionedWorldEvent<>(tWorld) - .setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) - .createExplosion(tStrength, true); + new WorldSpawnedEventBuilder.ExplosionEffectEventBuilder() + .setStrength(tStrength) + .setSmoking(true) + .setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) + .setWorld(tWorld); } } } diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java index 4459b2203a..0716d84bd6 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java @@ -9,7 +9,7 @@ import gregtech.api.interfaces.tileentity.IColoredTileEntity; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.PositionedWorldEvent; +import gregtech.api.util.WorldSpawnedEventBuilder; import gregtech.api.util.GT_Config; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_LanguageManager; @@ -699,9 +699,12 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { World tWorld = getBaseMetaTileEntity().getWorld(); tWorld.setBlock(tX, tY, tZ, Blocks.air); if (GregTech_API.sMachineExplosions){ - new PositionedWorldEvent<>(tWorld) - .setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) - .createExplosion(tStrength, true); + new WorldSpawnedEventBuilder.ExplosionEffectEventBuilder() + .setStrength(tStrength) + .setSmoking(true) + .setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) + .setWorld(tWorld) + .run(); } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java index 8e0c010995..59011d27a8 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java @@ -17,7 +17,7 @@ import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Utility; -import gregtech.api.util.PositionedWorldEvent; +import gregtech.api.util.WorldSpawnedEventBuilder; import gregtech.common.GT_Client; import gregtech.common.covers.GT_Cover_Drain; import gregtech.common.covers.GT_Cover_FluidRegulator; @@ -446,16 +446,21 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { if (aIndex == 9) { GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(4), 5, 1.0F, aX, aY, aZ); - new PositionedWorldEvent<>(getBaseMetaTileEntity().getWorld(), "largesmoke") - .times(6, (x, i) -> x.setPosition( + new WorldSpawnedEventBuilder.ParticleEventBuilder() + .setIdentifier("largesmoke") + .setWorld(getBaseMetaTileEntity().getWorld()) + .times(6, (x, i) -> x + .setMotion( + ForgeDirection.getOrientation(i).offsetX / 5.0, + ForgeDirection.getOrientation(i).offsetY / 5.0, + ForgeDirection.getOrientation(i).offsetZ / 5.0 + ) + .setPosition( aX - 0.5 + XSTR_INSTANCE.nextFloat(), aY - 0.5 + XSTR_INSTANCE.nextFloat(), aZ - 0.5 + XSTR_INSTANCE.nextFloat() - ).spawnParticle( - ForgeDirection.getOrientation(i).offsetX / 5.0, - ForgeDirection.getOrientation(i).offsetY / 5.0, - ForgeDirection.getOrientation(i).offsetZ / 5.0 - )); + ).run() + ); } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java index 7d8d6dbba0..45df3c8d3c 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java @@ -8,7 +8,7 @@ import gregtech.api.objects.GT_ItemStack; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Utility; -import gregtech.api.util.PositionedWorldEvent; +import gregtech.api.util.WorldSpawnedEventBuilder; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; @@ -154,16 +154,22 @@ public abstract class GT_MetaTileEntity_BasicMachine_Bronze extends GT_MetaTileE super.doSound(aIndex, aX, aY, aZ); if (aIndex == 9) { GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(4), 5, 1.0F, aX, aY, aZ); - new PositionedWorldEvent<>(getBaseMetaTileEntity().getWorld(), "largesmoke") - .times(8, x -> x.setPosition( - aX - 0.5 + XSTR_INSTANCE.nextFloat(), - aY - 0.5 + XSTR_INSTANCE.nextFloat(), - aZ - 0.5 + XSTR_INSTANCE.nextFloat() - ).spawnParticle( - ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetX / 5.0, - ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetY / 5.0, - ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetZ / 5.0 - )); + + new WorldSpawnedEventBuilder.ParticleEventBuilder() + .setIdentifier("largesmoke") + .setWorld(getBaseMetaTileEntity().getWorld()) + .times(8, x -> x + .setMotion( + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetX / 5.0, + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetY / 5.0, + ForgeDirection.getOrientation(getBaseMetaTileEntity().getFrontFacing()).offsetZ / 5.0 + ) + .setPosition( + aX - 0.5 + XSTR_INSTANCE.nextFloat(), + aY - 0.5 + XSTR_INSTANCE.nextFloat(), + aZ - 0.5 + XSTR_INSTANCE.nextFloat() + ).run() + ); } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java index c2e4fc441c..84b9fd9d5f 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java @@ -12,7 +12,7 @@ import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; -import gregtech.api.util.PositionedWorldEvent; +import gregtech.api.util.WorldSpawnedEventBuilder; import ic2.core.Ic2Items; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Blocks; @@ -802,13 +802,16 @@ public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_ if (aBaseMetaTileEntity.getFrontFacing() != 1 && aBaseMetaTileEntity.getCoverIDAtSide((byte) 1) == 0 && !aBaseMetaTileEntity.getOpacityAtSide((byte) 1)) { Random tRandom = aBaseMetaTileEntity.getWorld().rand; - new PositionedWorldEvent<>(aBaseMetaTileEntity.getWorld(), "smoke") - .setPosition( - aBaseMetaTileEntity.getXCoord() + 0.8F - tRandom.nextFloat() * 0.6F, - aBaseMetaTileEntity.getYCoord() + 0.9F + tRandom.nextFloat() * 0.2F, - aBaseMetaTileEntity.getZCoord() + 0.8F - tRandom.nextFloat() * 0.6F - ) - .spawnParticle(0.0D, 0.0D, 0.0D); + new WorldSpawnedEventBuilder.ParticleEventBuilder() + .setMotion(0.0D, 0.0D, 0.0D) + .setIdentifier("smoke") + .setPosition( + aBaseMetaTileEntity.getXCoord() + 0.8F - tRandom.nextFloat() * 0.6F, + aBaseMetaTileEntity.getYCoord() + 0.9F + tRandom.nextFloat() * 0.2F, + aBaseMetaTileEntity.getZCoord() + 0.8F - tRandom.nextFloat() * 0.6F + ) + .setWorld(aBaseMetaTileEntity.getWorld()) + .run(); } break; } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java index 44567c96eb..9fbf880336 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java @@ -9,7 +9,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.PositionedWorldEvent; +import gregtech.api.util.WorldSpawnedEventBuilder; import gregtech.common.GT_Pollution; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -141,19 +141,26 @@ public class GT_MetaTileEntity_Hatch_Muffler extends GT_MetaTileEntity_Hatch { zSpd = aDir.offsetZ * (0.1F + 0.2F * XSTR_INSTANCE.nextFloat()); } - PositionedWorldEvent events = new PositionedWorldEvent<>(aWorld, name); + WorldSpawnedEventBuilder.ParticleEventBuilder events = + (WorldSpawnedEventBuilder.ParticleEventBuilder) + new WorldSpawnedEventBuilder.ParticleEventBuilder() + .setIdentifier(name) + .setWorld(aWorld); if (chk1) { - events.setPosition(xPos + ran1 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F) - .spawnParticle(xSpd, ySpd, zSpd); + events.setMotion(xSpd, ySpd, zSpd) + .setPosition(xPos + ran1 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F) + .run(); } if (chk2) { - events.setPosition(xPos + ran2 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F) - .spawnParticle(xSpd, ySpd, zSpd); + events.setMotion(xSpd, ySpd, zSpd) + .setPosition(xPos + ran2 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F) + .run(); } if (chk3) { - events.setPosition(xPos + ran3 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F) - .spawnParticle(xSpd, ySpd, zSpd); + events.setMotion(xSpd, ySpd, zSpd) + .setPosition(xPos + ran3 * 0.5F, yPos + XSTR_INSTANCE.nextFloat() * 0.5F, zPos + XSTR_INSTANCE.nextFloat() * 0.5F) + .run(); } } diff --git a/src/main/java/gregtech/api/util/GT_FoodStat.java b/src/main/java/gregtech/api/util/GT_FoodStat.java index 96345ef199..3d55291398 100644 --- a/src/main/java/gregtech/api/util/GT_FoodStat.java +++ b/src/main/java/gregtech/api/util/GT_FoodStat.java @@ -68,8 +68,15 @@ public class GT_FoodStat implements IFoodStat { ItemStack tStack = GT_OreDictUnificator.get(GT_Utility.copy(mEmptyContainer)); if (tStack != null && !aPlayer.inventory.addItemStackToInventory(tStack)) aPlayer.dropPlayerItemWithRandomChoice(tStack, true); - PositionedWorldEvent event = new PositionedWorldEvent<>(aPlayer.worldObj, "random.burp"); - event.playSoundAtEntity(aPlayer,0.5F, aPlayer.worldObj.rand.nextFloat() * 0.1F + 0.9F); + + new WorldSpawnedEventBuilder.SoundAtEntityEventBuilder() + .setIdentifier("random.burp") + .setVolume(0.5F) + .setPitch(aPlayer.worldObj.rand.nextFloat() * 0.1F + 0.9F) + .setEntity(aPlayer) + .setWorld(aPlayer.worldObj) + .run(); + if (!aPlayer.worldObj.isRemote) { if (mMilk) { aPlayer.curePotionEffects(new ItemStack(Items.milk_bucket, 1, 0)); @@ -80,9 +87,14 @@ public class GT_FoodStat implements IFoodStat { } } if (mExplosive) { - event.setThing(aPlayer) - .setPosition(aPlayer.posX, aPlayer.posY, aPlayer.posZ) - .newExplosion(4,true, true); + new WorldSpawnedEventBuilder.ExplosionEffectEventBuilder() + .setSmoking(true) + .setFlaming(true) + .setStrength(4f) + .setPosition(aPlayer.posX, aPlayer.posY, aPlayer.posZ) + .setEntity(aPlayer) + .setWorld(aPlayer.worldObj) + .run(); aPlayer.attackEntityFrom(GT_DamageSources.getExplodingDamage(), Float.MAX_VALUE); } } diff --git a/src/main/java/gregtech/api/util/PositionedWorldEvent.java b/src/main/java/gregtech/api/util/PositionedWorldEvent.java deleted file mode 100644 index b615daabf5..0000000000 --- a/src/main/java/gregtech/api/util/PositionedWorldEvent.java +++ /dev/null @@ -1,172 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -import java.util.Objects; -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -@SuppressWarnings("unused") -public class PositionedWorldEvent { - - public PositionedWorldEvent() {} - - public PositionedWorldEvent(World world) { - this.world = world; - } - - public PositionedWorldEvent(Vec3 position) { - this.position = position; - } - - public PositionedWorldEvent(T thing) { - this.thing = thing; - } - - public PositionedWorldEvent(World world, T thing) { - this(world); - this.thing = thing; - } - - public PositionedWorldEvent(World world, Vec3 position) { - this(world); - this.position = position; - } - - public PositionedWorldEvent(Vec3 position, T thing) { - this(position); - this.thing = thing; - } - - public PositionedWorldEvent(T thing, Vec3 position) { - this(position, thing); - } - - public PositionedWorldEvent(World world, Vec3 position, T thing) { - this(world, position); - this.thing = thing; - } - - public PositionedWorldEvent(World world, T thing, Vec3 position) { - this(world, position, thing); - } - - private World world; - private Vec3 position; - private T thing; - - public World getWorld() { - return world; - } - - public PositionedWorldEvent setWorld(World world) { - this.world = world; - return this; - } - - public Vec3 getPosition() { - return position; - } - - public PositionedWorldEvent setPosition(Vec3 position) { - this.position = position; - return this; - } - - public PositionedWorldEvent setPosition(double x, double y, double z) { - this.position = Vec3.createVectorHelper(x, y, z); - return this; - } - - public T getThing() { - return thing; - } - - public PositionedWorldEvent setThing(T thing) { - this.thing = thing; - return this; - } - - public void spawnParticle(double motionX, double motionY, double motionZ) { - if (position == null || !(thing instanceof String) || world == null) - throw new IllegalStateException("Position and world must be set, thing must be a string indicating the Particle to be spawned"); - - world.spawnParticle((String) thing, position.xCoord, position.yCoord, position.zCoord, motionX, motionY, motionZ); - } - - public void playSoundEffect(float volume, float pitch) { - if (position == null || !(thing instanceof String) || world == null) - throw new IllegalStateException("Position and world must be set, thing must be a string indicating the SoundEffect to be spawned"); - - world.playSoundEffect(position.xCoord, position.yCoord, position.zCoord, (String) thing, volume, pitch); - } - - /** - * Positional Data is rounded down due to this targeting a block. - */ - public void playRecord() { - if (position == null || !(thing instanceof String) || world == null) - throw new IllegalStateException("Position and world must be set, thing must be a string indicating the Record to be spawned"); - - world.playRecord((String) thing, (int) position.xCoord, (int) position.yCoord, (int) position.zCoord); - } - - public void playSound(float volume, float pitch, boolean proximity) { - if (position == null || !(thing instanceof String) || world == null) - throw new IllegalStateException("Position and world must be set, thing must be a string indicating the Sound to be spawned"); - - world.playSound(position.xCoord, position.yCoord, position.zCoord, (String) thing, volume, pitch, proximity); - } - - public void createExplosion(float strength, boolean isSmoking) { - newExplosion(strength, false, isSmoking); - } - - public void newExplosion(float strength, boolean isFlaming, boolean isSmoking) { - if (position == null || world == null ||