From 96390c52b131dff919167992a5491dcc17763830 Mon Sep 17 00:00:00 2001 From: Fhoz Date: Tue, 29 Mar 2022 23:46:35 +0200 Subject: [PATCH 1/5] Fhoz - Fixed Antigravity Bubbles --- .../me/profelements/dynatech/DynaTech.java | 7 +++ .../items/electric/AntigravityBubble.java | 40 ++++---------- .../dynatech/tasks/AntigravityBubbleTask | 55 +++++++++++++++++++ 3 files changed, 72 insertions(+), 30 deletions(-) create mode 100644 src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask diff --git a/src/main/java/me/profelements/dynatech/DynaTech.java b/src/main/java/me/profelements/dynatech/DynaTech.java index d0e8e393..32354eee 100644 --- a/src/main/java/me/profelements/dynatech/DynaTech.java +++ b/src/main/java/me/profelements/dynatech/DynaTech.java @@ -13,6 +13,7 @@ import me.profelements.dynatech.listeners.PicnicBasketListener; import me.profelements.dynatech.setup.DynaTechItemsSetup; import me.profelements.dynatech.tasks.ItemBandTask; +import me.profelements.dynatech.tasks.AntigravityBubbleTask; import org.apache.commons.lang.Validate; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; @@ -68,6 +69,12 @@ public void onEnable() { getLogger().log(Level.WARNING, " DynaTech will be switching to JAVA 11 "); getLogger().log(Level.WARNING, " Please Update to JAVA 11 "); } + + Bukkit.getScheduler().scheduleSyncRepeatingTask(DynaTech.getInstance(), new Runnable() { + public void run() { + AntigravityBubbleTask.run(); + } + }, 0, 60); } @Override diff --git a/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java b/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java index 387f818f..fca9e5ae 100644 --- a/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java +++ b/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java @@ -9,7 +9,9 @@ import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.profelements.dynatech.items.electric.abstracts.AMachine; +import me.profelements.dynatech.tasks.AntigravityBubbleTask; import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Entity; @@ -27,8 +29,7 @@ public class AntigravityBubble extends AMachine { - private final Set enabledPlayers = new HashSet<>(); - + private static Location bubbleLocation; private static final int[] BORDER = new int[] { 1, 2, 6, 7, 9, 10, 11, 15, 16, 17, 19, 20, 24, 25 }; private static final int[] BORDER_IN = new int[] { 3, 4, 5, 12, 14, 21, 22, 23 }; private static final int[] BORDER_OUT = new int[] { 0, 8, 18, 26 }; @@ -57,50 +58,29 @@ public boolean isSynchronized() { @Override public void tick(Block b) { - Collection bubbledEntities = b.getWorld().getNearbyEntities(b.getLocation(), 25, 25, 25); + bubbleLocation = b.getLocation(); + AntigravityBubbleTask.addBubble(bubbleLocation); + Collection bubbledEntities = b.getWorld().getNearbyEntities(b.getLocation(), 25, 25, 25); + for (Entity entity : bubbledEntities) { if (entity instanceof Player) { Player p = (Player) entity; - if (!p.getAllowFlight()) { - enabledPlayers.add(p.getUniqueId()); - p.setAllowFlight(true); removeCharge(b.getLocation(), getEnergyConsumption()); } } } - - final Iterator playerIterator = enabledPlayers.iterator(); - while (playerIterator.hasNext()) { - final UUID uuid = playerIterator.next(); - Player p = Bukkit.getPlayer(uuid); - - if (p != null && !bubbledEntities.contains(p)) { - p.setAllowFlight(false); - p.setFlying(false); - p.setFallDistance(0.0f); - playerIterator.remove(); - } - } } private ItemHandler onBlockBreak() { + AntigravityBubbleTask.removeBubble(bubbleLocation); return new BlockBreakHandler(false, false) { @Override public void onPlayerBreak(BlockBreakEvent e, ItemStack tool, List drops) { - final Iterator playerIterator = enabledPlayers.iterator(); - while (playerIterator.hasNext()) { - final UUID uuid = playerIterator.next(); - Player p = Bukkit.getPlayer(uuid); - if (p != null) { - p.setAllowFlight(false); - p.setFlying(false); - p.setFallDistance(0.0F); - playerIterator.remove(); - } - } + + AntigravityBubbleTask.removeBubble(e.getBlock().getLocation()); } }; } diff --git a/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask b/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask new file mode 100644 index 00000000..0c230ddf --- /dev/null +++ b/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask @@ -0,0 +1,55 @@ +package me.profelements.dynatech.tasks; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +public class AntigravityBubbleTask { + static Set bubbleLocations = new HashSet<>(); + static Set bubbledPlayers = new HashSet<>(); + static Set playerLog = new HashSet<>(); + public static void run() { + for (Location bubble : bubbleLocations) { + Collection bubbledEntities = bubble.getWorld().getNearbyEntities(bubble, 25, 25, 25); + for (Entity entity : bubbledEntities) { + if (entity instanceof Player) { + Player p = (Player) entity; + UUID uuid = p.getUniqueId(); + playerLog.add(uuid); + if (!p.getAllowFlight()) { + bubbledPlayers.add(uuid); + p.setAllowFlight(true); + } + } + } + } + if (bubbledPlayers != null) { + for (UUID uuid : bubbledPlayers) { + Player p = Bukkit.getPlayer(uuid); + if (p != null && !playerLog.contains(uuid)) { + p.setAllowFlight(false); + p.setFlying(false); + p.setFallDistance(0.0f); + bubbledPlayers.remove(uuid); + } + } + } + + playerLog.clear(); + } + + + public static void addBubble(Location blockLocation) { + bubbleLocations.add(blockLocation); + } + public static void removeBubble(Location blockLocation) { + bubbleLocations.remove(blockLocation); + } +} \ No newline at end of file From 48aae7c7721b32e3441b6ab9f396aee1004f3386 Mon Sep 17 00:00:00 2001 From: Fhoz Date: Tue, 29 Mar 2022 23:48:36 +0200 Subject: [PATCH 2/5] Fhoz - Whoopsie, forgot to make the task a java file --- .../dynatech/items/electric/AntigravityBubble.java | 5 ----- .../{AntigravityBubbleTask => AntigravityBubbleTask.java} | 0 2 files changed, 5 deletions(-) rename src/main/java/me/profelements/dynatech/tasks/{AntigravityBubbleTask => AntigravityBubbleTask.java} (100%) diff --git a/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java b/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java index fca9e5ae..da5e75eb 100644 --- a/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java +++ b/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java @@ -10,7 +10,6 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.profelements.dynatech.items.electric.abstracts.AMachine; import me.profelements.dynatech.tasks.AntigravityBubbleTask; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -21,11 +20,7 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; import java.util.List; -import java.util.Set; -import java.util.UUID; public class AntigravityBubble extends AMachine { diff --git a/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask b/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java similarity index 100% rename from src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask rename to src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java From fc5357bc32f893f2a2d18e065041832b11d903fa Mon Sep 17 00:00:00 2001 From: Fhoz Date: Thu, 31 Mar 2022 18:04:56 +0200 Subject: [PATCH 3/5] Gave myself some recognition for spending hours on fixing something --- .../me/profelements/dynatech/tasks/AntigravityBubbleTask.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java b/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java index 0c230ddf..10dee60c 100644 --- a/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java +++ b/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java @@ -11,6 +11,10 @@ import java.util.Set; import java.util.UUID; + +/** + * @author Fhoz https://github.com/Fhoz +*/ public class AntigravityBubbleTask { static Set bubbleLocations = new HashSet<>(); static Set bubbledPlayers = new HashSet<>(); From cae35612646880825c5c9a2854ec4dda60c02085 Mon Sep 17 00:00:00 2001 From: Fhoz Date: Fri, 1 Apr 2022 18:47:38 +0200 Subject: [PATCH 4/5] Fixed antigrav bubbles with feedback from Sefiraat --- .../me/profelements/dynatech/DynaTech.java | 7 -- .../items/electric/AntigravityBubble.java | 73 ++++++++++++++++--- .../dynatech/tasks/AntigravityBubbleTask.java | 59 --------------- 3 files changed, 63 insertions(+), 76 deletions(-) delete mode 100644 src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java diff --git a/src/main/java/me/profelements/dynatech/DynaTech.java b/src/main/java/me/profelements/dynatech/DynaTech.java index 32354eee..d0e8e393 100644 --- a/src/main/java/me/profelements/dynatech/DynaTech.java +++ b/src/main/java/me/profelements/dynatech/DynaTech.java @@ -13,7 +13,6 @@ import me.profelements.dynatech.listeners.PicnicBasketListener; import me.profelements.dynatech.setup.DynaTechItemsSetup; import me.profelements.dynatech.tasks.ItemBandTask; -import me.profelements.dynatech.tasks.AntigravityBubbleTask; import org.apache.commons.lang.Validate; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; @@ -69,12 +68,6 @@ public void onEnable() { getLogger().log(Level.WARNING, " DynaTech will be switching to JAVA 11 "); getLogger().log(Level.WARNING, " Please Update to JAVA 11 "); } - - Bukkit.getScheduler().scheduleSyncRepeatingTask(DynaTech.getInstance(), new Runnable() { - public void run() { - AntigravityBubbleTask.run(); - } - }, 0, 60); } @Override diff --git a/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java b/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java index da5e75eb..bbb42a64 100644 --- a/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java +++ b/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java @@ -9,7 +9,8 @@ import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.profelements.dynatech.items.electric.abstracts.AMachine; -import me.profelements.dynatech.tasks.AntigravityBubbleTask; + +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -20,11 +21,20 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +/** + * @author ProfElements https://github.com/ProfElements + * @author Fhoz https://github.com/Fhoz +*/ public class AntigravityBubble extends AMachine { - - private static Location bubbleLocation; + private static final Map> allEnabledPlayers = new HashMap<>(); + private static final Set allUuids = new HashSet<>(); private static final int[] BORDER = new int[] { 1, 2, 6, 7, 9, 10, 11, 15, 16, 17, 19, 20, 24, 25 }; private static final int[] BORDER_IN = new int[] { 3, 4, 5, 12, 14, 21, 22, 23 }; private static final int[] BORDER_OUT = new int[] { 0, 8, 18, 26 }; @@ -53,29 +63,72 @@ public boolean isSynchronized() { @Override public void tick(Block b) { - bubbleLocation = b.getLocation(); - AntigravityBubbleTask.addBubble(bubbleLocation); - + Set tempUuids = new HashSet<>(); + tempUuids.clear(); Collection bubbledEntities = b.getWorld().getNearbyEntities(b.getLocation(), 25, 25, 25); - for (Entity entity : bubbledEntities) { if (entity instanceof Player) { Player p = (Player) entity; + if (allEnabledPlayers.get(b.getLocation()) == null) { + tempUuids.add(p.getUniqueId()); + allEnabledPlayers.put(b.getLocation(), tempUuids); + } else { + + allEnabledPlayers.get(b.getLocation()).add(p.getUniqueId()); + } if (!p.getAllowFlight()) { + p.setAllowFlight(true); removeCharge(b.getLocation(), getEnergyConsumption()); } } } + + + + if (allEnabledPlayers.get(b.getLocation()) != null) { + for (UUID uuid : allEnabledPlayers.get(b.getLocation())) { + Player p = Bukkit.getPlayer(uuid); + if (p != null && !bubbledEntities.contains(p)) { + allEnabledPlayers.get(b.getLocation()).remove(p.getUniqueId()); + checkPlayer(p.getUniqueId()); + } + } + } + } + + private void checkPlayer(UUID u) { + allUuids.clear(); + for (Map.Entry> entry : allEnabledPlayers.entrySet()) { + Set uuidSet = entry.getValue(); + for (UUID uuid : uuidSet) { + if (!allUuids.contains(uuid)) { + allUuids.add(uuid); + } + } + } + + if (!allUuids.contains(u)) { + Player p = Bukkit.getPlayer(u); + p.setAllowFlight(false); + p.setFlying(false); + p.setFallDistance(0.0f); + } } private ItemHandler onBlockBreak() { - AntigravityBubbleTask.removeBubble(bubbleLocation); return new BlockBreakHandler(false, false) { @Override public void onPlayerBreak(BlockBreakEvent e, ItemStack tool, List drops) { - - AntigravityBubbleTask.removeBubble(e.getBlock().getLocation()); + if (allEnabledPlayers.get(e.getBlock().getLocation()) != null) { + for (UUID uuid : allEnabledPlayers.get(e.getBlock().getLocation())) { + Player p = Bukkit.getPlayer(uuid); + if (p != null) { + allEnabledPlayers.get(e.getBlock().getLocation()).remove(p.getUniqueId()); + checkPlayer(p.getUniqueId()); + } + } + } } }; } diff --git a/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java b/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java deleted file mode 100644 index 10dee60c..00000000 --- a/src/main/java/me/profelements/dynatech/tasks/AntigravityBubbleTask.java +++ /dev/null @@ -1,59 +0,0 @@ -package me.profelements.dynatech.tasks; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; - - -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - - -/** - * @author Fhoz https://github.com/Fhoz -*/ -public class AntigravityBubbleTask { - static Set bubbleLocations = new HashSet<>(); - static Set bubbledPlayers = new HashSet<>(); - static Set playerLog = new HashSet<>(); - public static void run() { - for (Location bubble : bubbleLocations) { - Collection bubbledEntities = bubble.getWorld().getNearbyEntities(bubble, 25, 25, 25); - for (Entity entity : bubbledEntities) { - if (entity instanceof Player) { - Player p = (Player) entity; - UUID uuid = p.getUniqueId(); - playerLog.add(uuid); - if (!p.getAllowFlight()) { - bubbledPlayers.add(uuid); - p.setAllowFlight(true); - } - } - } - } - if (bubbledPlayers != null) { - for (UUID uuid : bubbledPlayers) { - Player p = Bukkit.getPlayer(uuid); - if (p != null && !playerLog.contains(uuid)) { - p.setAllowFlight(false); - p.setFlying(false); - p.setFallDistance(0.0f); - bubbledPlayers.remove(uuid); - } - } - } - - playerLog.clear(); - } - - - public static void addBubble(Location blockLocation) { - bubbleLocations.add(blockLocation); - } - public static void removeBubble(Location blockLocation) { - bubbleLocations.remove(blockLocation); - } -} \ No newline at end of file From b7f9947d60d7d59c50d676100cd573c1a65c38af Mon Sep 17 00:00:00 2001 From: Fhoz Date: Fri, 1 Apr 2022 20:10:15 +0200 Subject: [PATCH 5/5] Cleaned up some code and made energy consumption function correctly --- .../items/electric/AntigravityBubble.java | 28 ++++++------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java b/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java index bbb42a64..e3635145 100644 --- a/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java +++ b/src/main/java/me/profelements/dynatech/items/electric/AntigravityBubble.java @@ -63,19 +63,13 @@ public boolean isSynchronized() { @Override public void tick(Block b) { - Set tempUuids = new HashSet<>(); - tempUuids.clear(); + Set playersInBubble = allEnabledPlayers.getOrDefault(b.getLocation(), new HashSet<>()); Collection bubbledEntities = b.getWorld().getNearbyEntities(b.getLocation(), 25, 25, 25); for (Entity entity : bubbledEntities) { - if (entity instanceof Player) { + if (entity instanceof Player && getCharge(b.getLocation()) >= getEnergyConsumption()) { Player p = (Player) entity; - if (allEnabledPlayers.get(b.getLocation()) == null) { - tempUuids.add(p.getUniqueId()); - allEnabledPlayers.put(b.getLocation(), tempUuids); - } else { - - allEnabledPlayers.get(b.getLocation()).add(p.getUniqueId()); - } + playersInBubble.add(p.getUniqueId()); + allEnabledPlayers.put(b.getLocation(), playersInBubble); if (!p.getAllowFlight()) { p.setAllowFlight(true); removeCharge(b.getLocation(), getEnergyConsumption()); @@ -83,15 +77,11 @@ public void tick(Block b) { } } - - - if (allEnabledPlayers.get(b.getLocation()) != null) { - for (UUID uuid : allEnabledPlayers.get(b.getLocation())) { - Player p = Bukkit.getPlayer(uuid); - if (p != null && !bubbledEntities.contains(p)) { - allEnabledPlayers.get(b.getLocation()).remove(p.getUniqueId()); - checkPlayer(p.getUniqueId()); - } + for (UUID uuid : playersInBubble) { + Player p = Bukkit.getPlayer(uuid); + if (p != null && !bubbledEntities.contains(p)) { + allEnabledPlayers.get(b.getLocation()).remove(p.getUniqueId()); + checkPlayer(p.getUniqueId()); } } }