From a3777ddeab2cce237cf9a4a3891483c3aaf08d3d Mon Sep 17 00:00:00 2001 From: Alkalus <3060479+draknyte1@users.noreply.github.com> Date: Mon, 30 Dec 2019 20:32:05 +0000 Subject: + Implemented Blacklist for OB Glider. Closes #584. + Added default versioning file. --- src/Java/gtPlusPlus/xmod/ob/GliderHandler.java | 102 +++++++++++++++++++++ .../gtPlusPlus/xmod/ob/HANDLER_OpenBlocks.java | 38 ++++++++ 2 files changed, 140 insertions(+) create mode 100644 src/Java/gtPlusPlus/xmod/ob/GliderHandler.java create mode 100644 src/Java/gtPlusPlus/xmod/ob/HANDLER_OpenBlocks.java (limited to 'src/Java/gtPlusPlus/xmod/ob') diff --git a/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java b/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java new file mode 100644 index 0000000000..b1874b7ed2 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java @@ -0,0 +1,102 @@ +package gtPlusPlus.xmod.ob; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.entity.player.PlayerUseItemEvent; + +public class GliderHandler { + + private static final AutoMap mDimensionalBlacklist = new AutoMap(); + + @SubscribeEvent + public void onItemUsage(final PlayerUseItemEvent event) { + if (event != null) { + ItemStack aItem = event.item; + if (ItemUtils.checkForInvalidItems(aItem)) { + Class aItemGliderClass = ReflectionUtils.getClass("openblocks.common.item.ItemHangGlider"); + if (aItemGliderClass.isInstance(aItem.getItem())) { + if (!canPlayerGlideInThisDimension(event.entityPlayer)){ + event.setCanceled(true); + } + } + } + } + } + + private static final boolean canPlayerGlideInThisDimension(EntityPlayer aPlayer) { + World aWorld = aPlayer.worldObj; + if (aWorld == null) { + return false; + } + else { + if (aWorld.provider == null) { + return false; + } + else { + int aDimID = aWorld.provider.dimensionId; + for (int i : mDimensionalBlacklist) { + if (i == aDimID) { + return false; + } + } + } + } + return true; + } + + static final void populateBlacklist() { + if (!mDimensionalBlacklist.isEmpty()) { + return; + } + File aBlacklist = gtPlusPlus.core.util.data.FileUtils.getFile("config/GTplusplus/", "GliderBlacklist", "cfg"); + List lines = new ArrayList(); + try { + lines = org.apache.commons.io.FileUtils.readLines(aBlacklist, "utf-8"); + } catch (IOException e) { + e.printStackTrace(); + } + if (lines.isEmpty()) { + FileWriter fw; + try { + String aInfoTip = "# Add one dimension ID per line. Lines with a # are comments and are ignored."; + fw = new FileWriter(aBlacklist); + fw.write(aInfoTip); + fw.close(); + lines.add(aInfoTip); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (!lines.isEmpty()) { + for (String s : lines) { + if (s != null && !s.equals("") && !s.contains("#")) { + s = StringUtils.remove(s, " "); + s = StringUtils.trim(s); + s = StringUtils.remove(s, ","); + Integer g = Integer.decode(s); + if (g != null) { + mDimensionalBlacklist.add(g); + Logger.INFO("[OpenBlocks] Added Dimension with ID '"+g+"' to Blacklist for Glider."); + } + } + } + } + } + + +} diff --git a/src/Java/gtPlusPlus/xmod/ob/HANDLER_OpenBlocks.java b/src/Java/gtPlusPlus/xmod/ob/HANDLER_OpenBlocks.java new file mode 100644 index 0000000000..c1b678f5ee --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/ob/HANDLER_OpenBlocks.java @@ -0,0 +1,38 @@ +package gtPlusPlus.xmod.ob; + +import static gtPlusPlus.core.creative.AddToCreativeTab.tabMisc; + +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.item.base.BaseItemBurnable; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.LoadedMods; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.railcraft.utils.RailcraftUtils; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +public class HANDLER_OpenBlocks { + + public static void preInit() { + if (LoadedMods.OpenBlocks) { + + } + } + + public static void init() { + if (LoadedMods.OpenBlocks) { + GliderHandler.populateBlacklist(); + } + } + + public static void postInit() { + if (LoadedMods.OpenBlocks) { + Utils.registerEvent(new GliderHandler()); + } + } + +} -- cgit From ac483bfb390f99f9b0ebca23e8ee407737f91f54 Mon Sep 17 00:00:00 2001 From: Alkalus <3060479+draknyte1@users.noreply.github.com> Date: Tue, 7 Jan 2020 23:55:51 +0000 Subject: + Added more verbosity to Glider Blacklisting. --- src/Java/gtPlusPlus/xmod/ob/GliderHandler.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/ob') diff --git a/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java b/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java index b1874b7ed2..47d30adeff 100644 --- a/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java +++ b/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java @@ -12,11 +12,11 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.entity.player.PlayerUseItemEvent; public class GliderHandler { @@ -25,13 +25,18 @@ public class GliderHandler { @SubscribeEvent public void onItemUsage(final PlayerUseItemEvent event) { - if (event != null) { + if (event != null && event.entityPlayer != null) { ItemStack aItem = event.item; if (ItemUtils.checkForInvalidItems(aItem)) { Class aItemGliderClass = ReflectionUtils.getClass("openblocks.common.item.ItemHangGlider"); if (aItemGliderClass.isInstance(aItem.getItem())) { if (!canPlayerGlideInThisDimension(event.entityPlayer)){ - event.setCanceled(true); + event.setCanceled(true); + PlayerUtils.messagePlayer(event.entityPlayer, "Glider is blacklisted in this dimension."); + Logger.INFO(""+event.entityPlayer.getCommandSenderName()+" tried to use glider in dimension "+event.entityPlayer.getEntityWorld().provider.dimensionId+"."); + } + else { + Logger.INFO(""+event.entityPlayer.getCommandSenderName()+" used glider in dimension "+event.entityPlayer.getEntityWorld().provider.dimensionId+"."); } } } -- cgit From 6bb3c6872c97b36c84f32bf730eee31206728c74 Mon Sep 17 00:00:00 2001 From: Alkalus <3060479+draknyte1@users.noreply.github.com> Date: Wed, 8 Jan 2020 01:31:41 +0000 Subject: $ Fixed Glider Blacklist handler, now correctly hooks the correct Forge event. --- src/Java/gtPlusPlus/xmod/ob/GliderHandler.java | 52 ++++++++++++++++++++------ 1 file changed, 40 insertions(+), 12 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/ob') diff --git a/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java b/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java index 47d30adeff..7a53572aae 100644 --- a/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java +++ b/src/Java/gtPlusPlus/xmod/ob/GliderHandler.java @@ -17,32 +17,60 @@ import gtPlusPlus.core.util.reflect.ReflectionUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -import net.minecraftforge.event.entity.player.PlayerUseItemEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; public class GliderHandler { - + private static final AutoMap mDimensionalBlacklist = new AutoMap(); - + @SubscribeEvent - public void onItemUsage(final PlayerUseItemEvent event) { - if (event != null && event.entityPlayer != null) { - ItemStack aItem = event.item; + public void onItemUsageEx(final PlayerInteractEvent event) { + if (event != null && event.entityPlayer != null) { + + if (event.action != Action.RIGHT_CLICK_BLOCK && event.action != Action.RIGHT_CLICK_AIR) { + Logger.WARNING("[OpenBlocks] Wrong type of PlayerInteractEvent, skipping."); + } + if (event.entityPlayer.worldObj.isRemote) { + return; + } + + ItemStack aItem = event.entityPlayer.getItemInUse(); + if (!ItemUtils.checkForInvalidItems(aItem)) { + Logger.WARNING("[OpenBlocks] Item in use was invalid, trying currentlyEquipped."); + aItem = event.entityPlayer.getCurrentEquippedItem(); + } + if (!ItemUtils.checkForInvalidItems(aItem)) { + Logger.WARNING("[OpenBlocks] Item in use was invalid, trying heldItem."); + aItem = event.entityPlayer.getHeldItem(); + } if (ItemUtils.checkForInvalidItems(aItem)) { Class aItemGliderClass = ReflectionUtils.getClass("openblocks.common.item.ItemHangGlider"); if (aItemGliderClass.isInstance(aItem.getItem())) { if (!canPlayerGlideInThisDimension(event.entityPlayer)){ event.setCanceled(true); PlayerUtils.messagePlayer(event.entityPlayer, "Glider is blacklisted in this dimension."); - Logger.INFO(""+event.entityPlayer.getCommandSenderName()+" tried to use glider in dimension "+event.entityPlayer.getEntityWorld().provider.dimensionId+"."); + Logger.WARNING("[OpenBlocks] "+event.entityPlayer.getCommandSenderName()+" tried to use glider in dimension "+event.entityPlayer.getEntityWorld().provider.dimensionId+"."); } else { - Logger.INFO(""+event.entityPlayer.getCommandSenderName()+" used glider in dimension "+event.entityPlayer.getEntityWorld().provider.dimensionId+"."); + Logger.WARNING("[OpenBlocks] "+event.entityPlayer.getCommandSenderName()+" used glider in dimension "+event.entityPlayer.getEntityWorld().provider.dimensionId+"."); } } + else { + Logger.WARNING("[OpenBlocks] Item was not a glider."); + } + } + else { + Logger.WARNING("[OpenBlocks] Bad Item in player hand."); } + } + else { + Logger.WARNING("[OpenBlocks] Bad event or player."); } + + } - + private static final boolean canPlayerGlideInThisDimension(EntityPlayer aPlayer) { World aWorld = aPlayer.worldObj; if (aWorld == null) { @@ -63,7 +91,7 @@ public class GliderHandler { } return true; } - + static final void populateBlacklist() { if (!mDimensionalBlacklist.isEmpty()) { return; @@ -102,6 +130,6 @@ public class GliderHandler { } } } - - + + } -- cgit