diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mavericks/DisplaySlot.java b/Plugins/Mineplex.Core/src/mineplex/core/mavericks/DisplaySlot.java new file mode 100644 index 000000000..e15f75ae8 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/mavericks/DisplaySlot.java @@ -0,0 +1,115 @@ +package mineplex.core.mavericks; + +import java.util.ArrayList; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.util.Vector; + +import mineplex.core.common.block.schematic.Schematic; +import mineplex.core.common.block.schematic.SchematicData; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; + +public class DisplaySlot +{ + + private MavericksApprovedWrapper _data; + private Location _loc; + private ArrayList _pastedEntities = new ArrayList<>(); + private Map _particles = null; + + public DisplaySlot(Location loc) + { + _loc = loc.clone(); + } + + public MavericksApprovedWrapper getData() + { + return _data; + } + + public void setData(MavericksApprovedWrapper data) + { + clearEntities(); + + Schematic schematic = data.getBuild().getSchematic(); + + Location a = _loc; + Location b = _loc.clone().add(schematic.getWidth(), schematic.getHeight(), schematic.getLength()); + + for(int x = a.getBlockX(); x < b.getX(); x++) + { + for(int y = a.getBlockY(); y < b.getY(); y++) + { + for(int z = a.getBlockZ(); z < b.getZ(); z++) + { + UtilBlock.setQuick(a.getWorld(), x, y, z, 0, (byte) 0); + } + } + } + SchematicData pasteData = schematic.paste(_loc, true, false); + for(Entity e : pasteData.getEntities()) + { + if(e instanceof Item) + { + //Don't despawn + e.setTicksLived(32768); + //Prevent Pickup + ((Item)e).setPickupDelay(32767); + } + else + { + UtilEnt.Vegetate(e, true); + UtilEnt.ghost(e, true, false); + } + _pastedEntities.add(e); + } + + _particles = data.getBuild().getParticles(); + + _data = data; + } + + public void updateParticles() + { + if(_particles == null) return; + + for(Entry e : _particles.entrySet()) + { + Location loc = _loc.clone().add(2, 0, 7).add(e.getKey()); + + ParticleType type = e.getValue(); + + int amount = 8; + + if (type == ParticleType.HUGE_EXPLOSION || + type == ParticleType.LARGE_EXPLODE || + type == ParticleType.NOTE) + amount = 1; + + UtilParticle.PlayParticleToAll(type, loc, 0.4f, 0.4f, 0.4f, 0, amount, ViewDist.LONG); + } + } + + private void clearEntities() + { + for(Entity e : _pastedEntities) + { + e.remove(); + } + _pastedEntities.clear(); + } + + public boolean isDisplaySlotEntity(Entity e) + { + return _pastedEntities.contains(e); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mavericks/MavericksApprovedRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/mavericks/MavericksApprovedRepository.java index a44c9b5e3..e9b3ad977 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mavericks/MavericksApprovedRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mavericks/MavericksApprovedRepository.java @@ -1,6 +1,7 @@ package mineplex.core.mavericks; import java.sql.Connection; +import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -28,7 +29,8 @@ import mineplex.serverdata.database.DBPool; public class MavericksApprovedRepository { - private static final String TABLE = "mavericksMasterBuildersApproved"; + private static final String TABLE_APPROVED = "mavericksMasterBuildersApproved"; + private static final String TABLE_BUILD = "mavericksMasterBuildersBuilds"; public CompletableFuture add(MavericksBuildWrapper data, UUID approvedBy) { @@ -41,7 +43,7 @@ public class MavericksApprovedRepository { try (Connection conn = DBPool.getAccount().getConnection()) { - PreparedStatement stmt = conn.prepareStatement("REPLACE INTO " + TABLE + " (BuildId, ApprovedBy, Display) SELECT ?, accounts.id, ? FROM accounts WHERE uuid=?"); + PreparedStatement stmt = conn.prepareStatement("REPLACE INTO " + TABLE_APPROVED + " (BuildId, ApprovedBy, Display) SELECT ?, accounts.id, ? FROM accounts WHERE uuid=?"); stmt.setLong(1, data.getBuildId()); stmt.setBoolean(2, display); stmt.setString(3, approvedBy.toString()); @@ -56,34 +58,61 @@ public class MavericksApprovedRepository }); } - public CompletableFuture> getToDisplay(boolean onlyDisplay, int limit, int offset) + public CompletableFuture> getToDisplay(boolean onlyDisplay, int limit, int offset) { return CompletableFuture.supplyAsync(() -> { try (Connection conn = DBPool.getAccount().getConnection()) { - String filter = onlyDisplay ? "WHERE Display=1 " : ""; - PreparedStatement stmt = conn.prepareStatement("SELECT BuildId," + - "(SELECT uuid from accounts WHERE accounts.id=" + TABLE + ".accountId)," + - "(SELECT name from accounts WHERE accounts.id=" + TABLE + ".accountId)," + - ",BuildTheme,Points,Place,Date,Schematic,Reviewed FROM " + TABLE + " " + filter + - " LIMIT " + limit + " OFFSET " + offset); + String filter = onlyDisplay ? " WHERE Display=1 " : " "; +// PreparedStatement stmt3 = conn.prepareStatement("SELECT BuildId," + +// "(SELECT uuid from accounts WHERE accounts.id=" + TABLE_APPROVED + ".accountId)," + +// "(SELECT name from accounts WHERE accounts.id=" + TABLE_APPROVED + ".accountId)," + +// ",BuildTheme,Points,Place,Date,Schematic,Reviewed FROM " + TABLE_APPROVED + " " + filter + +// " LIMIT " + limit + " OFFSET " + offset); + + PreparedStatement stmt = conn.prepareStatement( + "SELECT " + + TABLE_APPROVED + ".BuildId, ApprovedDate," + + "(SELECT uuid FROM accounts WHERE accounts.id=ApprovedBy)," + + "Display, FirstDisplayed," + + "BuildTheme," + + "(SELECT uuid FROM accounts WHERE accounts.id=accountId)," + + "(SELECT name FROM accounts WHERE accounts.id=accountId)," + + "Points, Place, Date, Schematic, Particles, Reviewed " + + "FROM " + TABLE_APPROVED + " " + + "INNER JOIN " + TABLE_BUILD + " " + + "ON " + TABLE_APPROVED + ".BuildId = " + TABLE_BUILD + ".BuildId" + + filter + + "LIMIT " + limit + " OFFSET " + offset); ResultSet set = stmt.executeQuery(); - List list = new ArrayList<>(); + List list = new ArrayList<>(); while (set.next()) - { + { long buildId = set.getLong(1); - UUID uuid = UUID.fromString(set.getString(2)); - String lastName = set.getString(3); - String theme = set.getString(4); - int votes = set.getInt(5); - int place = set.getInt(6); - long dateStamp = set.getLong(7); - byte[] schematic = set.getBytes(8); - byte[] particles = set.getBytes(9); - boolean reviewed = set.getBoolean(10); - list.add(new MavericksBuildWrapper(buildId, uuid, lastName, theme, votes, place, dateStamp, schematic, particles, reviewed)); + + long approvedDate = set.getLong(2); + UUID approvedBy = UUID.fromString(set.getString(3)); + boolean display = set.getBoolean(4); + Long firstDisplayed = set.getLong(5); + if(set.wasNull()) firstDisplayed = null; + + + String theme = set.getString(6); + UUID uuid = UUID.fromString(set.getString(7)); + String lastName = set.getString(8); + int votes = set.getInt(9); + int place = set.getInt(10); + long dateStamp = set.getLong(11); + byte[] schematic = set.getBytes(12); + byte[] particles = set.getBytes(13); + boolean reviewed = set.getBoolean(14); + MavericksBuildWrapper build = new MavericksBuildWrapper(buildId, uuid, lastName, theme, votes, place, dateStamp, schematic, particles, reviewed); + + MavericksApprovedWrapper approved = new MavericksApprovedWrapper(build, approvedDate, approvedBy, display, firstDisplayed); + + list.add(approved); } return list; } @@ -95,16 +124,25 @@ public class MavericksApprovedRepository }); } - public CompletableFuture setDisplay(long buildid, boolean display) + public CompletableFuture setDisplay(boolean display, long... buildids) { + if(buildids.length == 0) return null; return CompletableFuture.supplyAsync(() -> { try (Connection conn = DBPool.getAccount().getConnection()) { - PreparedStatement stmt = conn.prepareStatement("UPDATE " + TABLE + " SET Display=? WHERE BuildId=?"); + String where = "WHERE BuildId=?"; + for(int i = 1; i < buildids.length; i++) + { + where += " OR BuildId=?"; + } + PreparedStatement stmt = conn.prepareStatement("UPDATE " + TABLE_APPROVED + " SET Display=? " + where); stmt.setBoolean(1, display); - stmt.setLong(2, buildid); + for(int i = 0; i < buildids.length; i++) + { + stmt.setLong(2+i, buildids[i]); + } return stmt.executeUpdate() > 0; } @@ -115,5 +153,25 @@ public class MavericksApprovedRepository } }); } + + public CompletableFuture setDisplayDate(long buildid) + { + return CompletableFuture.supplyAsync(() -> + { + try (Connection conn = DBPool.getAccount().getConnection()) + { + PreparedStatement stmt = conn.prepareStatement("UPDATE " + TABLE_APPROVED + " SET FirstDisplayed=? WHERE BuildId=?"); + stmt.setDate(1, new Date(System.currentTimeMillis())); + stmt.setLong(2, buildid); + + return stmt.executeUpdate() > 0; + } + catch(Exception e) + { + e.printStackTrace(); + throw new RuntimeException(e); + } + }); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mavericks/MavericksApprovedWrapper.java b/Plugins/Mineplex.Core/src/mineplex/core/mavericks/MavericksApprovedWrapper.java new file mode 100644 index 000000000..37093c7de --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/mavericks/MavericksApprovedWrapper.java @@ -0,0 +1,58 @@ +package mineplex.core.mavericks; + +import java.util.UUID; + +/** + * A wrapper class to SQL data in the mavericksMasterBuildersApproved SQL table + */ + +public class MavericksApprovedWrapper +{ + + private final MavericksBuildWrapper _build; + private final long _approvedDate; + private final UUID _approvedBy; + private final boolean _display; + private Long _firstDisplayed; + + public MavericksApprovedWrapper(MavericksBuildWrapper build, long approvedDate, UUID approvedBy, boolean display, Long firstDisplayed) + { + _build = build; + _approvedDate = approvedDate; + _approvedBy = approvedBy; + _display = display; + _firstDisplayed = firstDisplayed; + } + + + public MavericksBuildWrapper getBuild() + { + return _build; + } + + public long getApprovedDate() + { + return _approvedDate; + } + + public UUID getApprovedBy() + { + return _approvedBy; + } + + public Long getFirstDisplayed() + { + return _firstDisplayed; + } + + public void setFirstDisplayed(Long firstDisplayed) + { + _firstDisplayed = firstDisplayed; + } + + public boolean isDisplay() + { + return _display; + } + +} diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index ba542f68a..64dd5e3f3 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -1,5 +1,9 @@ package mineplex.hub; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + import mineplex.core.CustomTagFix; import mineplex.core.PacketsInteractionFix; import mineplex.core.account.CoreClientManager; @@ -8,9 +12,6 @@ import mineplex.core.antihack.AntiHack; import mineplex.core.aprilfools.AprilFoolsManager; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.chat.Chat; -import mineplex.core.chatsnap.SnapshotManager; -import mineplex.core.chatsnap.SnapshotPlugin; -import mineplex.core.chatsnap.publishing.SnapshotPublisher; import mineplex.core.command.CommandCenter; import mineplex.core.common.events.ServerShutdownEvent; import mineplex.core.creature.Creature; @@ -43,8 +44,6 @@ import mineplex.core.profileCache.ProfileCacheManager; import mineplex.core.projectile.ProjectileManager; import mineplex.core.punish.Punish; import mineplex.core.recharge.Recharge; -import mineplex.core.report.ReportManager; -import mineplex.core.report.ReportPlugin; import mineplex.core.resourcepack.ResourcePackManager; import mineplex.core.serverConfig.ServerConfiguration; import mineplex.core.sponsorbranding.BrandingManager; @@ -58,6 +57,7 @@ import mineplex.core.updater.Updater; import mineplex.core.velocity.VelocityFix; import mineplex.core.visibility.VisibilityManager; import mineplex.hub.modules.BillboardManager; +import mineplex.hub.modules.MavericksManager; import mineplex.hub.modules.StackerManager; import mineplex.hub.queue.QueueManager; import mineplex.hub.server.ServerManager; @@ -72,10 +72,6 @@ import mineplex.minecraft.game.core.combat.CombatManager; import mineplex.minecraft.game.core.damage.DamageManager; import mineplex.minecraft.game.core.fire.Fire; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; - public class Hub extends JavaPlugin implements IRelation { private String WEB_CONFIG = "webServer"; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index d97b30e75..44f6e612e 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -112,6 +112,7 @@ import mineplex.hub.modules.ForcefieldManager; import mineplex.hub.modules.HubVisibilityManager; import mineplex.hub.modules.JumpManager; import mineplex.hub.modules.KothManager; +import mineplex.hub.modules.MavericksManager; import mineplex.hub.modules.NewsManager; import mineplex.hub.modules.ParkourManager; import mineplex.hub.modules.SoccerManager; @@ -169,6 +170,7 @@ public class HubManager extends MiniClientPlugin private BonusManager _bonusManager; // private HalloweenSpookinessManager _halloweenManager; // private TrickOrTreatManager _trickOrTreatManager; + private MavericksManager _mavericksManager; private Location _spawn; private int _scoreboardTick = 0; @@ -215,6 +217,8 @@ public class HubManager extends MiniClientPlugin new WorldManager(this); new JumpManager(this); //new TournamentInviter(this); + + _mavericksManager = new MavericksManager(plugin); _news = new NewsManager(this); @@ -920,6 +924,11 @@ public class HubManager extends MiniClientPlugin { return _punishManager; } + + public MavericksManager getMavericksManager() + { + return _mavericksManager; + } // public HalloweenSpookinessManager getHalloweenManager() // { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/MavericksManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/MavericksManager.java index 03050ffc1..ea278fb40 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/MavericksManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/MavericksManager.java @@ -2,22 +2,30 @@ package mineplex.hub.modules; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CompletionStage; +import java.util.function.Function; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Entity; import org.bukkit.event.EventHandler; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; import mineplex.core.common.util.BukkitFuture; +import mineplex.core.mavericks.DisplaySlot; import mineplex.core.mavericks.MavericksApprovedRepository; -import mineplex.core.mavericks.MavericksBuildWrapper; +import mineplex.core.mavericks.MavericksApprovedWrapper; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import mineplex.hub.modules.mavericks.DisplaySlot; import mineplex.hub.modules.mavericks.MavericksPortalManager; public class MavericksManager extends MiniPlugin { +// private static final long ROTATION_TIME = 1000*60*60*6; + private static final long ROTATION_TIME = 1000*30; + private MavericksPortalManager _portalManager; private MavericksApprovedRepository _repoApproved; @@ -28,29 +36,33 @@ public class MavericksManager extends MiniPlugin super("Mavericks", plugin); _portalManager = new MavericksPortalManager(_plugin); _repoApproved = new MavericksApprovedRepository(); + + _displaySlots.add(new DisplaySlot(new Location(Bukkit.getWorld("world"), -19, 63, -118))); + _displaySlots.add(new DisplaySlot(new Location(Bukkit.getWorld("world"), -19, 63, -145))); } @EventHandler public void onUpdate(UpdateEvent event) { - if(event.getType() != UpdateType.MIN_02) return; + if(event.getType() != UpdateType.SLOW) return; - - _repoApproved.getToDisplay(true, _displaySlots.size(), 0).thenCompose(BukkitFuture.accept((list) -> - { + Function, ? extends CompletionStage> updateTask = BukkitFuture.accept((list) -> + { List openSlots = new ArrayList<>(); - List undisplayedData = new ArrayList<>(); + List undisplayedData = new ArrayList<>(); undisplayedData.addAll(list); - slots: for(DisplaySlot slot : _displaySlots) { - for(MavericksBuildWrapper build : list) + if(slot.getData() != null) { - if(slot.getData().getBuildId() == build.getBuildId()) + for(MavericksApprovedWrapper build : list) { - undisplayedData.remove(build); - continue slots; + if(slot.getData().getBuild().getBuildId() == build.getBuild().getBuildId()) + { + undisplayedData.remove(build); + continue slots; + } } } openSlots.add(slot); @@ -58,11 +70,74 @@ public class MavericksManager extends MiniPlugin for(int i = 0; i < Math.min(openSlots.size(), undisplayedData.size()); i++) { - openSlots.get(i).setData(undisplayedData.get(i)); + MavericksApprovedWrapper approved = undisplayedData.get(i); + if(approved.getFirstDisplayed() == null) + { + _repoApproved.setDisplayDate(approved.getBuild().getBuildId()); + } + openSlots.get(i).setData(approved); } - })); + }); + + List outdated = new ArrayList<>(); + for(DisplaySlot slot : _displaySlots) + { + if(slot.getData() == null) continue; + + if(slot.getData().getFirstDisplayed() == null) + { + _repoApproved.setDisplayDate(slot.getData().getBuild().getBuildId()); + slot.getData().setFirstDisplayed(System.currentTimeMillis()); + } + else if(slot.getData().getFirstDisplayed() + ROTATION_TIME < System.currentTimeMillis()) + { + outdated.add(slot); + } + } + + if(outdated.size() > 0) + { + _repoApproved.getToDisplay(true, outdated.size(), _displaySlots.size()).thenCompose(BukkitFuture.accept((list2) -> + { + if(list2.isEmpty()) return; + + long[] ids = new long[list2.size()]; + for(int i = 0; i < list2.size(); i++) + { + ids[i] = outdated.get(i).getData().getBuild().getBuildId(); + } + _repoApproved.setDisplay(false, ids).thenCompose(BukkitFuture.accept((success) -> + { + _repoApproved.getToDisplay(true, _displaySlots.size(), 0).thenCompose(updateTask); + })); + })); + } + else + { + _repoApproved.getToDisplay(true, _displaySlots.size(), 0).thenCompose(updateTask); + } } + @EventHandler + public void updateParticles(UpdateEvent event) + { + if(event.getType() == UpdateType.FAST) + { + for(DisplaySlot d : _displaySlots) + { + d.updateParticles(); + } + } + } + + public boolean isStatueEntity(Entity e) + { + for(DisplaySlot d : _displaySlots) + { + if(d.isDisplaySlotEntity(e)) return true; + } + return false; + } public MavericksPortalManager getPortalManager() { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java index 532058fa2..36b17043e 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java @@ -81,6 +81,9 @@ public class StackerManager extends MiniPlugin implements IThrown if (stackee instanceof EnderDragon) return; + if (Manager.getMavericksManager().isStatueEntity(stackee)) + return; + if (stackee instanceof Player && ((Player)stackee).getGameMode() != GameMode.SURVIVAL) return; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/DisplaySlot.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/DisplaySlot.java deleted file mode 100644 index d802a8666..000000000 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/DisplaySlot.java +++ /dev/null @@ -1,47 +0,0 @@ -package mineplex.hub.modules.mavericks; - -import org.bukkit.Location; - -import mineplex.core.common.block.schematic.Schematic; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.mavericks.MavericksBuildWrapper; - -public class DisplaySlot -{ - - private MavericksBuildWrapper _data; - private Location _loc; - - public DisplaySlot(Location loc) - { - _loc = loc.clone(); - } - - public MavericksBuildWrapper getData() - { - return _data; - } - - public void setData(MavericksBuildWrapper data) - { - Schematic schematic = data.getSchematic(); - - Location a = _loc; - Location b = _loc.clone().add(schematic.getWidth(), schematic.getHeight(), schematic.getLength()); - - for(int x = a.getBlockX(); x < b.getX(); x++) - { - for(int y = a.getBlockY(); y < b.getY(); y++) - { - for(int z = a.getBlockZ(); z < b.getZ(); z++) - { - UtilBlock.setQuick(a.getWorld(), x, y, z, 0, (byte) 0); - } - } - } - schematic.paste(_loc, true, false); - - _data = data; - } - -} diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/MavericksPortalManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/MavericksPortalManager.java index b116e5b1e..de145c1c6 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/MavericksPortalManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/mavericks/MavericksPortalManager.java @@ -33,11 +33,11 @@ public class MavericksPortalManager extends MiniPlugin super("Mavericks Teleporter", plugin); - _portalHubMavericks = new Box("world", new Vector(0, 200, 0), new Vector(10, 210, 10)); - _destMavericks = new Location(Bukkit.getWorld("world"), 100, 200, 100); + _portalHubMavericks = new Box("world", new Vector(6, 72, -1), new Vector(5, 75, 1)); + _destMavericks = new Location(Bukkit.getWorld("world"), -32, 63, -119, -90, 0); - _portalMavericksHub = new Box("world", new Vector(0, 100, 0), new Vector(10, 110, 10)); - _destHub = new Location(Bukkit.getWorld("world"), 100, 100, 100); + _portalMavericksHub = new Box("world", new Vector(-36, 63, -120), new Vector(-35, 66, -117)); + _destHub = new Location(Bukkit.getWorld("world"), 0.5, 80, 0.5); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java index 34077097e..4b6503105 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/build/BuildData.java @@ -375,12 +375,12 @@ public class BuildData protected Location getMin() { - return Vector.getMinimum(CornerA.toVector(), CornerB.toVector()).toLocation(CornerA.getWorld()).subtract(0, 1, 0); + return Vector.getMinimum(CornerA.toVector(), CornerB.toVector()).toBlockVector().toLocation(CornerA.getWorld()).subtract(0, 1, 0); } protected Location getMax() { - return Vector.getMaximum(CornerA.toVector(), CornerB.toVector()).toLocation(CornerA.getWorld()); + return Vector.getMaximum(CornerA.toVector(), CornerB.toVector()).toBlockVector().toLocation(CornerA.getWorld()); } public double getMaxHeight() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/buildmavericks/BuildDataCylinder.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/buildmavericks/BuildDataCylinder.java index 51254bca3..9330ff9b4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/buildmavericks/BuildDataCylinder.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/buildmavericks/BuildDataCylinder.java @@ -24,7 +24,7 @@ public class BuildDataCylinder extends BuildData public BuildDataCylinder(Player player, Location spawn, Location center) { super(player, spawn); - _blockSpawn = center; + _blockSpawn = center.getBlock().getLocation(); } @Override diff --git a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/MavericksReviewManager.java b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/MavericksReviewManager.java index 1701b2d44..4f8fd6252 100644 --- a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/MavericksReviewManager.java +++ b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/MavericksReviewManager.java @@ -22,6 +22,7 @@ import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; @@ -134,6 +135,12 @@ public class MavericksReviewManager extends MiniPlugin }.runTask(UtilServer.getPlugin()); } + @EventHandler + public void onIgnite(BlockIgniteEvent event) + { + event.setCancelled(true); + } + @EventHandler public void onPhysics(BlockPhysicsEvent event) { @@ -530,7 +537,7 @@ public class MavericksReviewManager extends MiniPlugin for(Entry e : data.getData().getParticles().entrySet()) { - Location loc = data.getAreaMin().add(2, 0, 2).add(e.getKey()); + Location loc = data.getAreaMin().add(2, 0, 7).add(e.getKey()); ParticleType type = e.getValue(); @@ -642,8 +649,13 @@ public class MavericksReviewManager extends MiniPlugin return; } - Bukkit.broadcastMessage("Pulling from DB, limit: " + (index-_reviewQueue.size()+1) + ", offset " + _reviewQueue.size()); - _repoBuilds.getToReview(true, index-_reviewQueue.size()+1, _reviewQueue.size()).thenCompose(BukkitFuture.accept((list) -> + int offset = 0; + for(MavericksBuildWrapper build : _reviewQueue) + { + if(!build.isReviewed()) offset++; + } + Bukkit.broadcastMessage("Pulling from DB, limit: " + (index-_reviewQueue.size()+1) + ", offset " + offset); + _repoBuilds.getToReview(true, index-_reviewQueue.size()+1, offset).thenCompose(BukkitFuture.accept((list) -> { Bukkit.broadcastMessage("Retrived " + list.size() + " entries from DB"); _reviewQueue.addAll(list); diff --git a/Plugins/mavericks-review-hub/src/nautilus/game/arcade/game/games/buildmavericks/repository2/MavericksApprovedRepository.java b/Plugins/mavericks-review-hub/src/nautilus/game/arcade/game/games/buildmavericks/repository2/MavericksApprovedRepository.java deleted file mode 100644 index 2c43ce809..000000000 --- a/Plugins/mavericks-review-hub/src/nautilus/game/arcade/game/games/buildmavericks/repository2/MavericksApprovedRepository.java +++ /dev/null @@ -1,119 +0,0 @@ -package nautilus.game.arcade.game.games.buildmavericks.repository2; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -import mineplex.serverdata.database.DBPool; - -/** - * Repository for Mavericks-MasterBuilders SQL game data - * - - * Table to back this repository may be created with - * CREATE TABLE mavericksMasterBuildersApproved ( - buildId INT NOT NULL AUTO_INCREMENT, - ApproveDate INT NOT NULL, - ApprovedBy VARCHAR(36) NOT NULL DEFAULT '', - Display TINYINT(1) NOT NULL DEFAULT '1', - PRIMARY KEY (buildId), - CONSTRAINT account_id FOREIGN KEY (ApprovedBy) REFERENCES accounts (id) ON DELETE NO ACTION ON UPDATE NO ACTION, - CONSTRAINT build_id FOREIGN KEY (BuildId) REFERENCES mavericksMasterBuildersBuilds (BuildId) ON DELETE NO ACTION ON UPDATE NO ACTION -) - */ -public class MavericksApprovedRepository -{ - - private static final String TABLE = "mavericksMasterBuildersApproved"; - - public CompletableFuture add(MavericksBuildWrapper data, UUID approvedBy) - { - return add(data, approvedBy, true); - } - - public CompletableFuture add(MavericksBuildWrapper data, UUID approvedBy, boolean display) - { - return CompletableFuture.supplyAsync(() -> - { - try (Connection conn = DBPool.getAccount().getConnection()) - { - PreparedStatement stmt = conn.prepareStatement("REPLACE INTO " + TABLE + " (BuildId, ApprovedBy, Display) SELECT ?, accounts.id, ? FROM accounts WHERE uuid=?"); - stmt.setLong(1, data.getBuildId()); - stmt.setBoolean(2, display); - stmt.setString(3, approvedBy.toString()); - - return stmt.executeUpdate() > 0; - } - catch(SQLException e) - { - e.printStackTrace(); - throw new RuntimeException(e); - } - }); - } - - public CompletableFuture> getToDisplay(boolean onlyDisplay, int limit, int offset) - { - return CompletableFuture.supplyAsync(() -> - { - try (Connection conn = DBPool.getAccount().getConnection()) - { - String filter = onlyDisplay ? "WHERE Display=1 " : ""; - PreparedStatement stmt = conn.prepareStatement("SELECT BuildId," + - "(SELECT uuid from accounts WHERE accounts.id=" + TABLE + ".accountId)," + - "(SELECT name from accounts WHERE accounts.id=" + TABLE + ".accountId)," + - ",BuildTheme,Points,Place,Date,Schematic,Reviewed FROM " + TABLE + " " + filter + - " LIMIT " + limit + " OFFSET " + offset); - - ResultSet set = stmt.executeQuery(); - List list = new ArrayList<>(); - while (set.next()) - { - long buildId = set.getLong(1); - UUID uuid = UUID.fromString(set.getString(2)); - String lastName = set.getString(3); - String theme = set.getString(4); - int votes = set.getInt(5); - int place = set.getInt(6); - long dateStamp = set.getLong(7); - byte[] schematic = set.getBytes(8); - byte[] particles = set.getBytes(9); - boolean reviewed = set.getBoolean(10); - list.add(new MavericksBuildWrapper(buildId, uuid, lastName, theme, votes, place, dateStamp, schematic, particles, reviewed)); - } - return list; - } - catch (SQLException e) - { - e.printStackTrace(); - throw new RuntimeException(e); - } - }); - } - - public CompletableFuture setDisplay(long buildid, boolean display) - { - return CompletableFuture.supplyAsync(() -> - { - try (Connection conn = DBPool.getAccount().getConnection()) - { - - PreparedStatement stmt = conn.prepareStatement("UPDATE " + TABLE + " SET Display=? WHERE BuildId=?"); - stmt.setBoolean(1, display); - stmt.setLong(2, buildid); - - return stmt.executeUpdate() > 0; - } - catch(SQLException e) - { - e.printStackTrace(); - throw new RuntimeException(e); - } - }); - } - -} diff --git a/Plugins/mavericks-review-hub/src/nautilus/game/arcade/game/games/buildmavericks/repository2/MavericksBuildRepository.java b/Plugins/mavericks-review-hub/src/nautilus/game/arcade/game/games/buildmavericks/repository2/MavericksBuildRepository.java deleted file mode 100644 index f3d423382..000000000 --- a/Plugins/mavericks-review-hub/src/nautilus/game/arcade/game/games/buildmavericks/repository2/MavericksBuildRepository.java +++ /dev/null @@ -1,95 +0,0 @@ -package nautilus.game.arcade.game.games.buildmavericks.repository2; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -import mineplex.serverdata.database.DBPool; - -/** - * Repository for Mavericks-MasterBuilders SQL game data - * - - * Table to back this repository may be created with - * CREATE TABLE IF NOT EXISTS mavericksMasterBuildersBuilds ( - accountId INT NOT NULL, - BuildTheme VARCHAR(255) NOT NULL, - Points DOUBLE NOT NULL, - Place INT NOT NULL, - Date BIGINT NOT NULL, - Schematic BLOB, - Reviewed TINYINT, - PRIMARY KEY (accountId,Date), - FOREIGN KEY (accountId) REFERENCES accounts(id) ON DELETE NO ACTION ON UPDATE NO ACTION - ); - */ -public class MavericksBuildRepository -{ - - private static final String TABLE = "mavericksMasterBuildersBuilds"; - - public CompletableFuture> getToReview(boolean onlyUnreviewed, int limit, int offset) - { - return CompletableFuture.supplyAsync(() -> - { - try (Connection conn = DBPool.getAccount().getConnection()) - { - String filter = onlyUnreviewed ? "WHERE Reviewed=0 " : ""; - PreparedStatement stmt = conn.prepareStatement("SELECT BuildId," + - "(SELECT uuid from accounts WHERE accounts.id=" + TABLE + ".accountId)," + - "(SELECT name from accounts WHERE accounts.id=" + TABLE + ".accountId)," + - "BuildTheme,Points,Place,Date,Schematic,Particles,Reviewed FROM " + TABLE + " " + filter + - " ORDER BY Points DESC LIMIT " + limit + " OFFSET " + offset); - - ResultSet set = stmt.executeQuery(); - List list = new ArrayList<>(); - while (set.next()) - { - long buildId = set.getLong(1); - UUID uuid = UUID.fromString(set.getString(2)); - String lastName = set.getString(3); - String theme = set.getString(4); - int votes = set.getInt(5); - int place = set.getInt(6); - long dateStamp = set.getLong(7); - byte[] schematic = set.getBytes(8); - byte[] particles = set.getBytes(9); - boolean reviewed = set.getBoolean(10); - list.add(new MavericksBuildWrapper(buildId, uuid, lastName, theme, votes, place, dateStamp, schematic, particles, reviewed)); - } - return list; - } - catch (SQLException e) - { - e.printStackTrace(); - throw new RuntimeException(e); - } - }); - } - - public CompletableFuture setReviewed(long buildId, boolean reviewed) - { - return CompletableFuture.supplyAsync(() -> - { - try (Connection conn = DBPool.getAccount().getConnection()) - { - - PreparedStatement stmt = conn.prepareStatement("UPDATE " + TABLE + " SET Reviewed=? WHERE BuildId=?"); - stmt.setBoolean(1, reviewed); - stmt.setLong(2, buildId); - - return stmt.executeUpdate() > 0; - } - catch(SQLException e) - { - e.printStackTrace(); - throw new RuntimeException(e); - } - }); - } - -} diff --git a/Plugins/mavericks-review-hub/src/nautilus/game/arcade/game/games/buildmavericks/repository2/MavericksBuildWrapper.java b/Plugins/mavericks-review-hub/src/nautilus/game/arcade/game/games/buildmavericks/repository2/MavericksBuildWrapper.java deleted file mode 100644 index 30f64c0d1..000000000 --- a/Plugins/mavericks-review-hub/src/nautilus/game/arcade/game/games/buildmavericks/repository2/MavericksBuildWrapper.java +++ /dev/null @@ -1,170 +0,0 @@ -package nautilus.game.arcade.game.games.buildmavericks.repository2; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.UUID; - -import org.bukkit.util.Vector; - -import com.java.sk89q.jnbt.CompoundTag; -import com.java.sk89q.jnbt.NBTUtils; -import com.java.sk89q.jnbt.Tag; - -import mineplex.core.common.block.schematic.Schematic; -import mineplex.core.common.block.schematic.UtilSchematic; -import mineplex.core.common.util.UtilParticle.ParticleType; - -/** - * A simple wrapper class for Mavericks-MasterBuilders SQL data - */ -public class MavericksBuildWrapper -{ - private final long _buildId; - private final UUID _uuid; - private final String _theme; - private final double _points; - private final int _place; - private final long _dateStamp; - private final byte[] _schematic; - private final byte[] _particles; - private boolean _reviewed; - - private final String _name; - - - public MavericksBuildWrapper(long buildId, UUID uuid, String name, String theme, double points, int place, long dateStamp, - byte[] schematic, byte[] particles, boolean reviewed) - { - this._buildId = buildId; - this._uuid = uuid; - this._name = name; - this._theme = theme; - this._points = points; - this._place = place; - this._dateStamp = dateStamp; - this._schematic = schematic; - this._particles = particles; - this._reviewed = reviewed; - } - - public MavericksBuildWrapper(long buildId, UUID uuid, String theme, double points, int place, long dateStamp, - byte[] schematic, byte[] particles, boolean reviewed) - { - this(buildId, uuid, null, theme, points, place, dateStamp, schematic, particles, reviewed); - } - - public long getBuildId() - { - return _buildId; - } - - public UUID getUUID() - { - return _uuid; - } - - public String getName() - { - return _name; - } - - public boolean hasNameSet() - { - return _name != null; - } - - public String getTheme() - { - return _theme; - } - - public double getPoints() - { - return _points; - } - - public int getPlace() - { - return _place; - } - - public long getDateStamp() - { - return _dateStamp; - } - - public byte[] getSchematicBytes() - { - return _schematic; - } - - public boolean isReviewed() - { - return _reviewed; - } - - public void setReviewed(boolean reviewed) - { - _reviewed = reviewed; - } - - public Schematic getSchematic() - { - try - { - return UtilSchematic.loadSchematic(_schematic); - } - catch (Exception e) - { - e.printStackTrace(); - return null; - } - } - - public boolean hasParticles() - { - return _particles != null && _particles.length > 0; - } - - public byte[] getParticlesRaw() - { - return _particles; - } - - public Map getParticles() - { - Map map = new HashMap<>(); - if(!hasParticles()) return map; - - try - { - CompoundTag tag = (CompoundTag) NBTUtils.getFromBytesCompressed(_particles).getTag(); - for(Entry e : tag.getValue().entrySet()) - { - CompoundTag parent = (CompoundTag) e.getValue(); - - Vector v = NBTUtils.getVector(parent); - ParticleType particle = ParticleType.valueOf(parent.getString("particle")); - - while(map.containsKey(v)) v.add(new Vector(0.00000001, 0, 0)); - map.put(v, particle); - - } - } - catch (Exception e) - { - e.printStackTrace(); - } - - return map; - } - - @Override - public String toString() - { - return "MavericksBuildWrapper[uuid='" + _uuid + "',theme='" + _theme + "',points=" + _points + ",place=" + _place - + ",date=" + _dateStamp + ",Schematic=ByteArray[" + _schematic.length + "]]"; - } - -}