From 8e7d051e768615166e96219284b331718afa4fdd Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Sun, 11 Apr 2021 16:11:42 +0200 Subject: [PATCH] Lasers respect FTB Claims --- build.gradle | 5 ++++ src/main/scala/edx/core/Electrodynamics.scala | 7 ++++- .../edx/core/ftbcompat/FTBCompatOff.java | 11 ++++++++ .../scala/edx/core/ftbcompat/FTBCompatOn.java | 27 +++++++++++++++++++ .../scala/edx/core/ftbcompat/IFTBCompat.java | 10 +++++++ .../circuit/component/laser/Laser.scala | 2 +- 6 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 src/main/scala/edx/core/ftbcompat/FTBCompatOff.java create mode 100644 src/main/scala/edx/core/ftbcompat/FTBCompatOn.java create mode 100644 src/main/scala/edx/core/ftbcompat/IFTBCompat.java diff --git a/build.gradle b/build.gradle index 3f749a92c..743b32bae 100644 --- a/build.gradle +++ b/build.gradle @@ -131,6 +131,10 @@ repositories { name = "ic2" url = "http://maven.ic2.player.to/" } + maven { + name = "curse" + url = "https://www.cursemaven.com/" + } } dependencies { @@ -145,4 +149,5 @@ dependencies { compile "codechicken:NotEnoughItems:${config.version.minecraft}-${config.version.nei}:dev" compile "mcp.mobius.waila:Waila:1.5.8_dev3_1.7.10" compile "net.industrial-craft:industrialcraft-2:2.2.654-experimental:dev" + compile "curse.maven:ftbu-237102:2291494" } diff --git a/src/main/scala/edx/core/Electrodynamics.scala b/src/main/scala/edx/core/Electrodynamics.scala index 8e4c24a1d..8d0473b88 100644 --- a/src/main/scala/edx/core/Electrodynamics.scala +++ b/src/main/scala/edx/core/Electrodynamics.scala @@ -3,8 +3,9 @@ package edx.core import cpw.mods.fml.common.Mod.EventHandler import cpw.mods.fml.common.event.{FMLInitializationEvent, FMLPostInitializationEvent, FMLPreInitializationEvent} import cpw.mods.fml.common.network.NetworkRegistry -import cpw.mods.fml.common.{Mod, SidedProxy} +import cpw.mods.fml.common.{Loader, Mod, SidedProxy} import edx.basic.BasicContent +import edx.core.ftbcompat.{FTBCompatOff, FTBCompatOn, IFTBCompat} import edx.core.handler.TextureHookHandler import edx.core.resource.AutoResourceFactory import edx.electrical.ElectricalContent @@ -32,6 +33,7 @@ object Electrodynamics /** Packets */ val packetHandler = ResonantEngine.packetHandler val loadables = new LoadableHandler + var ftbcompat: IFTBCompat = new FTBCompatOff @SidedProxy(clientSide = "edx.core.ClientProxy", serverSide = "edx.core.CommonProxy") var proxy: CommonProxy = _ @@ -62,6 +64,9 @@ object Electrodynamics @EventHandler def init(evt: FMLInitializationEvent) { + if (Loader.isModLoaded("FTBU")) { + ftbcompat = new FTBCompatOn + } ResonantPartFactory.init() AutoResourceFactory.init() loadables.init() diff --git a/src/main/scala/edx/core/ftbcompat/FTBCompatOff.java b/src/main/scala/edx/core/ftbcompat/FTBCompatOff.java new file mode 100644 index 000000000..5287bcc97 --- /dev/null +++ b/src/main/scala/edx/core/ftbcompat/FTBCompatOff.java @@ -0,0 +1,11 @@ +package edx.core.ftbcompat; + +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class FTBCompatOff implements IFTBCompat { + @Override + public boolean canDestroyBlock(Vec3 blockpos, Vec3 laserpos, World world) { + return true; + } +} diff --git a/src/main/scala/edx/core/ftbcompat/FTBCompatOn.java b/src/main/scala/edx/core/ftbcompat/FTBCompatOn.java new file mode 100644 index 000000000..bfd4d6de0 --- /dev/null +++ b/src/main/scala/edx/core/ftbcompat/FTBCompatOn.java @@ -0,0 +1,27 @@ +package edx.core.ftbcompat; + +import ftb.utils.world.LMWorldServer; +import ftb.utils.world.claims.ClaimedChunk; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class FTBCompatOn implements IFTBCompat { + @Override + public boolean canDestroyBlock(Vec3 blockpos, Vec3 laserpos, World world) { + int bcx = ((int) blockpos.xCoord) >> 4; + int bcz = ((int) blockpos.zCoord) >> 4; + int lcx = ((int) laserpos.xCoord) >> 4; + int lcz = ((int) laserpos.zCoord) >> 4; + + ClaimedChunk bchunk = LMWorldServer.inst.claimedChunks.getChunk(world.provider.dimensionId, bcx, bcz); + ClaimedChunk lchunk = LMWorldServer.inst.claimedChunks.getChunk(world.provider.dimensionId, lcx, lcz); + + if (bchunk == null) { + return true; + } else if (lchunk == null) { + return false; + } else { + return bchunk.ownerID == lchunk.ownerID; + } + } +} diff --git a/src/main/scala/edx/core/ftbcompat/IFTBCompat.java b/src/main/scala/edx/core/ftbcompat/IFTBCompat.java new file mode 100644 index 000000000..8a88df807 --- /dev/null +++ b/src/main/scala/edx/core/ftbcompat/IFTBCompat.java @@ -0,0 +1,10 @@ +package edx.core.ftbcompat; + +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public interface IFTBCompat { + + boolean canDestroyBlock(Vec3 blockpos, Vec3 laserpos, World world); + +} diff --git a/src/main/scala/edx/electrical/circuit/component/laser/Laser.scala b/src/main/scala/edx/electrical/circuit/component/laser/Laser.scala index 460fd84c3..39619fcc2 100644 --- a/src/main/scala/edx/electrical/circuit/component/laser/Laser.scala +++ b/src/main/scala/edx/electrical/circuit/component/laser/Laser.scala @@ -88,7 +88,7 @@ object Laser /** * Attempt to burn block */ - if (!world.isRemote) + if (!world.isRemote && Electrodynamics.ftbcompat.canDestroyBlock(hitBlockPos.toVec3, start.toVec3, world)) { val hardness = hitBlock.getBlockHardness(world, hitBlockPos.x.toInt, hitBlockPos.y.toInt, hitBlockPos.z.toInt)