diff --git a/src/main/java/org/ultramine/mods/privreg/regions/RegionCreationException.java b/src/main/java/org/ultramine/mods/privreg/regions/RegionCreationException.java new file mode 100644 index 0000000..c130a52 --- /dev/null +++ b/src/main/java/org/ultramine/mods/privreg/regions/RegionCreationException.java @@ -0,0 +1,5 @@ +package org.ultramine.mods.privreg.regions; + +public class RegionCreationException extends RuntimeException +{ +} diff --git a/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java b/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java index 99ca35c..cd8e048 100644 --- a/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java +++ b/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java @@ -23,6 +23,7 @@ import org.ultramine.regions.Rectangle; import org.ultramine.regions.RegionMap; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -112,7 +113,7 @@ return nextRegionId++; } - public Region createRegion(TileBlockRegion te, GameProfile player) + public @Nonnull Region createRegion(TileBlockRegion te, GameProfile player) throws RegionCreationException { final int cd = RegionConfig.CheckDistance; BlockPos block = BlockPos.fromTileEntity(te); @@ -141,7 +142,7 @@ if(parent == null) shape = shape.setSide(ForgeDirection.UP, 255).setSide(ForgeDirection.DOWN, 0); if (parent == null && hasRegionsInRange(shape.expandAll(cd))) - return null; + throw new RegionCreationException(); Region region = new Region(this, getNextRegionID(), true); region.setBlock(block); diff --git a/src/main/java/org/ultramine/mods/privreg/tiles/TileBlockRegion.java b/src/main/java/org/ultramine/mods/privreg/tiles/TileBlockRegion.java index eb096e8..ce411ba 100644 --- a/src/main/java/org/ultramine/mods/privreg/tiles/TileBlockRegion.java +++ b/src/main/java/org/ultramine/mods/privreg/tiles/TileBlockRegion.java @@ -12,6 +12,9 @@ import net.minecraft.network.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ChatStyle; +import net.minecraft.util.EnumChatFormatting; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.ultramine.gui.IGui; @@ -25,6 +28,7 @@ import org.ultramine.mods.privreg.packets.PacketRegionAction; import org.ultramine.mods.privreg.packets.PacketTEBlockRegion; import org.ultramine.mods.privreg.regions.Region; +import org.ultramine.mods.privreg.regions.RegionCreationException; import org.ultramine.mods.privreg.regions.RegionManager; import org.ultramine.mods.privreg.regions.RegionManagerClient; import org.ultramine.mods.privreg.regions.RegionRights; @@ -76,14 +80,12 @@ return; } - region = getRegionManager().createRegion(this, ((EntityPlayerMP) entity).getGameProfile()); - if(region == null) - { - remove = true; - } - else - { + try { + region = getRegionManager().createRegion(this, ((EntityPlayerMP) entity).getGameProfile()); new PacketRegionAction(region.getID(), PacketRegionAction.CLIENT_RENDER).sendTo((EntityPlayerMP)entity); + } catch(RegionCreationException e) { + remove = true; + ((EntityPlayerMP) entity).addChatComponentMessage(new ChatComponentTranslation("privreg.msg.createfail").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED))); } } @@ -190,7 +192,7 @@ if(remove) { - worldObj.setBlockSilently(xCoord, yCoord, zCoord, Blocks.air, 0, 3); + worldObj.func_147480_a(xCoord, yCoord, zCoord, true); } } } diff --git a/src/main/resources/assets/privreg/lang/en_US.lang b/src/main/resources/assets/privreg/lang/en_US.lang index 04956f1..51ae7e4 100644 --- a/src/main/resources/assets/privreg/lang/en_US.lang +++ b/src/main/resources/assets/privreg/lang/en_US.lang @@ -109,6 +109,7 @@ privreg.gui.module.admin.cmd1=command blacklist: privreg.gui.module.admin.cmd2=whitelist: +privreg.msg.createfail=Failed to create region: Itersects with other region! privreg.msg.entering=Entering the private region privreg.msg.leave=Leaving the private region privreg.msg.place=Placing blocks is prohibited in the area diff --git a/src/main/resources/assets/privreg/lang/ru_RU.lang b/src/main/resources/assets/privreg/lang/ru_RU.lang index 465192d..3a206c4 100644 --- a/src/main/resources/assets/privreg/lang/ru_RU.lang +++ b/src/main/resources/assets/privreg/lang/ru_RU.lang @@ -109,6 +109,7 @@ privreg.gui.module.admin.cmd1=Черный список команд: privreg.gui.module.admin.cmd2=Белый список команд: +privreg.msg.createfail=Не удалось создать регион: Пересечена другая зона! privreg.msg.entering=Вы вошли в приватный регион privreg.msg.leave=Вы покинули приватный регион privreg.msg.place=Установка блоков запрещена на данной территории