From 54ffc647488d3c331eb5ae8704d8a94a10c5129f Mon Sep 17 00:00:00 2001 From: Gamefreak2302 Date: Thu, 24 Jun 2021 15:34:06 +0200 Subject: [PATCH 1/3] Add other balances to balance command --- .../codehusky/huskycrates/HuskyCrates.java | 97 +++++++++++++------ .../huskycrates/command/BalanceCommand.java | 49 +++++++--- .../huskycrates/command/CommandRegister.java | 4 +- .../huskycrates/command/KeyCommand.java | 25 +++-- .../huskycrates/crate/virtual/Crate.java | 6 +- .../crate/virtual/views/SpinnerView.java | 8 +- 6 files changed, 133 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/codehusky/huskycrates/HuskyCrates.java b/src/main/java/com/codehusky/huskycrates/HuskyCrates.java index 878038e..d3e3be9 100644 --- a/src/main/java/com/codehusky/huskycrates/HuskyCrates.java +++ b/src/main/java/com/codehusky/huskycrates/HuskyCrates.java @@ -1,32 +1,36 @@ package com.codehusky.huskycrates; -import com.codehusky.huskycrates.command.BalanceCommand; -import com.codehusky.huskycrates.command.BlockCommand; -import com.codehusky.huskycrates.command.CommandRegister; -import com.codehusky.huskycrates.command.KeyCommand; -import com.codehusky.huskycrates.crate.listeners.CrateListeners; -import com.codehusky.huskycrates.crate.listeners.SQLUpdateListener; -import com.codehusky.huskycrates.crate.physical.EffectInstance; -import com.codehusky.huskycrates.crate.physical.PhysicalCrate; -import com.codehusky.huskycrates.crate.virtual.Crate; -import com.codehusky.huskycrates.crate.virtual.Key; -import com.codehusky.huskycrates.event.CrateInjectionEvent; -import com.codehusky.huskycrates.exception.ConfigParseError; -import com.google.inject.Inject; -import ninja.leaping.configurate.commented.CommentedConfigurationNode; -import ninja.leaping.configurate.hocon.HoconConfigurationLoader; -import ninja.leaping.configurate.loader.ConfigurationLoader; +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.ConcurrentModificationException; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spongepowered.api.Sponge; import org.spongepowered.api.config.ConfigDir; import org.spongepowered.api.config.DefaultConfig; +import org.spongepowered.api.data.DataQuery; +import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.event.Listener; +import org.spongepowered.api.event.block.ChangeBlockEvent; import org.spongepowered.api.event.cause.Cause; +import org.spongepowered.api.event.cause.EventContextKeys; import org.spongepowered.api.event.game.GameReloadEvent; +import org.spongepowered.api.event.game.state.GamePostInitializationEvent; import org.spongepowered.api.event.game.state.GamePreInitializationEvent; import org.spongepowered.api.event.game.state.GameStartedServerEvent; import org.spongepowered.api.event.game.state.GameStoppingServerEvent; +import org.spongepowered.api.item.inventory.ItemStackSnapshot; import org.spongepowered.api.plugin.Dependency; import org.spongepowered.api.plugin.Plugin; import org.spongepowered.api.plugin.PluginContainer; @@ -34,20 +38,23 @@ import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import java.util.ArrayList; -import java.util.ConcurrentModificationException; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; +import com.codehusky.huskycrates.command.BalanceCommand; +import com.codehusky.huskycrates.command.BlockCommand; +import com.codehusky.huskycrates.command.CommandRegister; +import com.codehusky.huskycrates.command.KeyCommand; +import com.codehusky.huskycrates.crate.listeners.CrateListeners; +import com.codehusky.huskycrates.crate.listeners.SQLUpdateListener; +import com.codehusky.huskycrates.crate.physical.EffectInstance; +import com.codehusky.huskycrates.crate.physical.PhysicalCrate; +import com.codehusky.huskycrates.crate.virtual.Crate; +import com.codehusky.huskycrates.crate.virtual.Key; +import com.codehusky.huskycrates.event.CrateInjectionEvent; +import com.codehusky.huskycrates.exception.ConfigParseError; +import com.google.inject.Inject; + +import ninja.leaping.configurate.commented.CommentedConfigurationNode; +import ninja.leaping.configurate.hocon.HoconConfigurationLoader; +import ninja.leaping.configurate.loader.ConfigurationLoader; @Plugin( @@ -148,7 +155,8 @@ public void gameInit(GamePreInitializationEvent event){ private int iterations = 0; private long lastMessage = 0; @Listener - public void gamePostInit(GamePreInitializationEvent event){ + // pre to post, prevent hc from being loaded before worlds are loaded + public void gamePostInit(GamePostInitializationEvent event){ crateListeners = new CrateListeners(); Sponge.getEventManager().registerListeners(this,crateListeners); } @@ -324,6 +332,12 @@ private boolean checkOrInitalizeDirectory(Path path){ @Listener public void gameStarted(GameStartedServerEvent event) { logger.info("Loading Crates..."); + // load unloaded worlds. ( try to avoid the invalid world error) + Sponge.getServer().getWorlds().forEach(w -> { + if(!w.isLoaded()) { + Sponge.getServer().loadWorld(w.getUniqueId()); + } + }); loadConfig(); @@ -421,4 +435,25 @@ public void gameShutdown(GameStoppingServerEvent event){ logger.info("HuskyCrates has shut down."); } +/** + * + * Prevent block placement if block is a (potential) key (no accidental loss in keys by placement (lever, tripwire-hook ... ) ) + * @param e + * + */ + @Listener + public void onBlockPlaced(ChangeBlockEvent.Place e) { + if (e.getSource() instanceof Player) { + ItemStackSnapshot item = e.getCause().getContext().get(EventContextKeys.USED_ITEM).orElse(null); // get item placed + if (item == null) { //check if item not null (prevent possible issues by wrong place detection) + return; + } + + if (item.toContainer().get(DataQuery.of("UnsafeData", "HCKEYID")).isPresent()) { // check if item is a key + e.setCancelled(true); // cancel the block placement. + } + + + } + } } diff --git a/src/main/java/com/codehusky/huskycrates/command/BalanceCommand.java b/src/main/java/com/codehusky/huskycrates/command/BalanceCommand.java index ca401eb..ec2bef2 100644 --- a/src/main/java/com/codehusky/huskycrates/command/BalanceCommand.java +++ b/src/main/java/com/codehusky/huskycrates/command/BalanceCommand.java @@ -2,6 +2,8 @@ import com.codehusky.huskycrates.HuskyCrates; import ninja.leaping.configurate.ConfigurationNode; + +import org.spongepowered.api.Sponge; import org.spongepowered.api.command.CommandException; import org.spongepowered.api.command.CommandResult; import org.spongepowered.api.command.CommandSource; @@ -9,6 +11,7 @@ import org.spongepowered.api.command.spec.CommandExecutor; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.entity.living.player.User; +import org.spongepowered.api.service.user.UserStorageService; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.format.TextColors; import org.spongepowered.api.text.serializer.TextSerializers; @@ -26,33 +29,51 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm GenericArguments.optionalWeak(GenericArguments.uuid(Text.of("uuid"))), GenericArguments.optionalWeak(GenericArguments.string(Text.of("username")))) */ - Optional user = args.getOne(Text.of("player")); - Optional uuid = args.getOne(Text.of("uuid")); - Optional username = args.getOne(Text.of("username")); + User user = (User)args.getOne(Text.of("player")).orElse(null); // default null + UUID uuid = (UUID)args.getOne(Text.of("uuid")).orElse(null); // default null + String username = (String)args.getOne(Text.of("username")).orElse(null); UUID balanceToUse = (src instanceof Player)?((Player) src).getUniqueId():null; - if(user.isPresent()){ + if(user != null){ if(!src.hasPermission("huskycrates.bal.others")){ src.sendMessage(Text.of(TextColors.RED,"You do not have permission to view the balance of others.")); return CommandResult.success(); } - - src.sendMessage(HuskyCrates.balanceCommandMessages.getOtherBalanceHeader(user.get().getName())); - }else if(uuid.isPresent()){ + // overwrite balance to check + balanceToUse = user.getUniqueId(); + src.sendMessage(HuskyCrates.balanceCommandMessages.getOtherBalanceHeader(user.getName())); + }else if(uuid != null){ if(!src.hasPermission("huskycrates.bal.others")){ src.sendMessage(Text.of(TextColors.RED,"You do not have permission to view the balance of others.")); return CommandResult.success(); } - - src.sendMessage(HuskyCrates.balanceCommandMessages.getUUIDBalanceHeader(uuid.get().toString())); - }else if(username.isPresent()){ + // overwrite balance to check + balanceToUse = uuid; + src.sendMessage(HuskyCrates.balanceCommandMessages.getUUIDBalanceHeader(uuid.toString())); + }else if(username != null){ if(!src.hasPermission("huskycrates.bal.others")){ src.sendMessage(Text.of(TextColors.RED,"You do not have permission to view the balance of others.")); return CommandResult.success(); } + + // Get user by (last known) username + Optional service = Sponge.getServiceManager().provide(UserStorageService.class); + if( service.get() != null&& service.isPresent() ) { + User us = service.get().get(username).isPresent()?service.get().get(username).get():null; + if(us == null) { // user does not exist + src.sendMessage(HuskyCrates.balanceCommandMessages.getUserNotExist(username)); + return CommandResult.success(); + } + // user does exist + src.sendMessage(HuskyCrates.balanceCommandMessages.getUUIDBalanceHeader(us.getName())); + // overwrite balance to check + balanceToUse = us.getUniqueId(); + }else { // no service, so no user + src.sendMessage(HuskyCrates.balanceCommandMessages.getUserNotExist(username)); + return CommandResult.success(); + } - src.sendMessage(HuskyCrates.balanceCommandMessages.getUserNotExist(username.get())); return CommandResult.success(); }else{ src.sendMessage(HuskyCrates.balanceCommandMessages.getSelfBalanceHeader()); @@ -66,8 +87,10 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm HashMap balances = HuskyCrates.registry.getVirtualKeyBalances(balanceToUse); for(Map.Entry entry : balances.entrySet()){ - String keyID = entry.getKey(); - src.sendMessage(HuskyCrates.balanceCommandMessages.getBalanceRow(HuskyCrates.registry.getKey(keyID).getName(),keyID,entry.getValue())); + if(entry.getValue() > 0) { // decrease huge lists with 0 keys + String keyID = entry.getKey(); + src.sendMessage(HuskyCrates.balanceCommandMessages.getBalanceRow(HuskyCrates.registry.getKey(keyID).getName(),keyID,entry.getValue())); + } } if(balances.size() == 0){ diff --git a/src/main/java/com/codehusky/huskycrates/command/CommandRegister.java b/src/main/java/com/codehusky/huskycrates/command/CommandRegister.java index e14aeba..9466542 100644 --- a/src/main/java/com/codehusky/huskycrates/command/CommandRegister.java +++ b/src/main/java/com/codehusky/huskycrates/command/CommandRegister.java @@ -36,7 +36,8 @@ public static void register(HuskyCrates plugin) { .executor(new KeyCommand()) .arguments(GenericArguments.optionalWeak(GenericArguments.literal(Text.of("virtual"),"v")), GenericArguments.firstParsing(new CrateArgument(Text.of("crate")), new KeyArgument(Text.of("key"))), - GenericArguments.optional(GenericArguments.firstParsing(GenericArguments.literal(Text.of("all"),"@a"), GenericArguments.player(Text.of("player")))), + // user to check offline players balances + GenericArguments.optional(GenericArguments.firstParsing(GenericArguments.literal(Text.of("all"),"@a"), GenericArguments.user(Text.of("player")))), GenericArguments.optionalWeak(GenericArguments.integer(Text.of("amount")))) .permission("huskycrates.key.base") .build(),"k","key") @@ -53,6 +54,7 @@ public static void register(HuskyCrates plugin) { .build(),"o","open","use") .child(CommandSpec.builder() .executor(new BalanceCommand()) + // change player to user for offline user .arguments(GenericArguments.optionalWeak(GenericArguments.user(Text.of("player"))), GenericArguments.optionalWeak(GenericArguments.uuid(Text.of("uuid"))), GenericArguments.optionalWeak(GenericArguments.string(Text.of("username")))) diff --git a/src/main/java/com/codehusky/huskycrates/command/KeyCommand.java b/src/main/java/com/codehusky/huskycrates/command/KeyCommand.java index f240a3d..62d0bca 100644 --- a/src/main/java/com/codehusky/huskycrates/command/KeyCommand.java +++ b/src/main/java/com/codehusky/huskycrates/command/KeyCommand.java @@ -12,6 +12,7 @@ import org.spongepowered.api.command.args.CommandContext; import org.spongepowered.api.command.spec.CommandExecutor; import org.spongepowered.api.entity.living.player.Player; +import org.spongepowered.api.entity.living.player.User; import org.spongepowered.api.item.inventory.transaction.InventoryTransactionResult; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.format.TextColors; @@ -27,7 +28,7 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm Optional pamount = args.getOne(Text.of("amount")); boolean isVirtual = args.getOne(Text.of("virtual")).isPresent(); - Optional player = args.getOne(Text.of("player")); + User player = (User)args.getOne(Text.of("player")).orElse(null); Optional all = args.getOne(Text.of("all")); Key workingWith = null; @@ -79,7 +80,7 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm } src.sendMessage(HuskyCrates.keyCommandMessages.getMassKeyDeliverySuccess(deliveredTo,amount)); - }else if(player.isPresent()){ /** Deliver keys to a player **/ + }else if(player!=null){ /** Deliver keys to a player **/ if(!src.hasPermission("huskycrates.key.others")){ src.sendMessage(Text.of(TextColors.RED,"You do not have permission to give others keys.")); return CommandResult.success(); @@ -87,15 +88,25 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm InventoryTransactionResult result = null; if(!isVirtual) - result = Util.getHotbarFirst(player.get().getInventory()).offer(workingWith.getKeyItemStack(amount)); + result = Util.getHotbarFirst(player.getInventory()).offer(workingWith.getKeyItemStack(amount)); else - HuskyCrates.registry.addVirtualKeys(player.get().getUniqueId(),workingWith.getId(),amount); + HuskyCrates.registry.addVirtualKeys(player.getUniqueId(),workingWith.getId(),amount); if(!isVirtual && result.getType() != InventoryTransactionResult.Type.SUCCESS){ - src.sendMessage(HuskyCrates.keyCommandMessages.getKeyDeliveryFail(player.get().getName(),amount)); + // on fail, check if it's full space and add not enough space if inventory full, making more clear if target has full inventory + if(player.getInventory().first().canFit(workingWith.getKeyItemStack(amount))) { + src.sendMessage(HuskyCrates.keyCommandMessages.getKeyDeliveryFail(player.getName(),amount).concat(Text.of(" (Not enough space)"))); + }else { + src.sendMessage(HuskyCrates.keyCommandMessages.getKeyDeliveryFail(player.getName(),amount)); + + } }else{ - player.get().sendMessage(HuskyCrates.keyCommandMessages.getReceivedKey(keyName,amount)); - src.sendMessage(HuskyCrates.keyCommandMessages.getKeyDeliverySuccess(player.get().getName(),amount)); + if(player.isOnline() ){ // Send message if player (user) is online + player.getPlayer().get().sendMessage(HuskyCrates.keyCommandMessages.getReceivedKey(keyName,amount)); + } + HuskyCrates.registry.addVirtualKeys(player.getUniqueId(),workingWith.getId(),amount); + + src.sendMessage(HuskyCrates.keyCommandMessages.getKeyDeliverySuccess(player.getName(),amount)); } }else if(src instanceof Player) { /** Deliver keys to self **/ diff --git a/src/main/java/com/codehusky/huskycrates/crate/virtual/Crate.java b/src/main/java/com/codehusky/huskycrates/crate/virtual/Crate.java index 3047cf0..03670f0 100644 --- a/src/main/java/com/codehusky/huskycrates/crate/virtual/Crate.java +++ b/src/main/java/com/codehusky/huskycrates/crate/virtual/Crate.java @@ -47,7 +47,7 @@ public class Crate { private List slots; - private int slotChanceMax = 0; + private double slotChanceMax = 0; private Boolean scrambleSlots; @@ -260,7 +260,7 @@ public String getId() { public int selectSlot() { int chanceCuml = 0; - int selection = new Random().nextInt(slotChanceMax+1); + int selection = new Random().nextInt((int)Math.floor(slotChanceMax+1)); for(int i = 0; i < slots.size(); i++){ chanceCuml += slots.get(i).getChance(); if(selection <= chanceCuml){ @@ -479,7 +479,7 @@ public void launchPreview(Player player){ for(int j = 0; j < slots.size(); j++) { ItemStack orig = slots.get(j).getDisplayItem().toItemStack(); List oldLore = orig.getOrElse(Keys.ITEM_LORE,new ArrayList<>()); - double val = ((double)slots.get(j).getChance()/(double)slotChanceMax)*100; + double val = (slots.get(j).getChance() / slotChanceMax)*100; BigDecimal occurance = new BigDecimal(val).setScale(2,BigDecimal.ROUND_HALF_UP); if (previewShowsRewardCount) { oldLore.add(Text.of(TextStyles.NONE,TextColors.GRAY,"Rewards: " + slots.get(j).getRewards().size())); diff --git a/src/main/java/com/codehusky/huskycrates/crate/virtual/views/SpinnerView.java b/src/main/java/com/codehusky/huskycrates/crate/virtual/views/SpinnerView.java index 078f62e..441231e 100644 --- a/src/main/java/com/codehusky/huskycrates/crate/virtual/views/SpinnerView.java +++ b/src/main/java/com/codehusky/huskycrates/crate/virtual/views/SpinnerView.java @@ -56,7 +56,13 @@ public SpinnerView(Crate ucrate, Player player, Location loc){ .setInterrupt(() -> { if(rewardGiven) return; try { - crate.getSlot(selectedSlot).rewardPlayer(player, this.physicalLocation); + // check if player has won, otherwise give the slot of selected slot + 4 (start from 1 if max is succeeded) + // prevents player from picking their reward + if(hasWon) { + crate.getSlot(selectedSlot).rewardPlayer(player, this.physicalLocation); + }else { + crate.getSlot(selectedSlot+4 %crate.getSlots().size()).rewardPlayer(player, this.physicalLocation); + } player.playSound(SoundTypes.ENTITY_EXPERIENCE_ORB_PICKUP, player.getLocation().getPosition(), 0.5); }catch (Exception e){ e.printStackTrace(); From b3c67dcf1957d16d82106e88f5faa2b96b767885 Mon Sep 17 00:00:00 2001 From: Gamefreak2302 Date: Thu, 24 Jun 2021 15:47:16 +0200 Subject: [PATCH 2/3] Fix message to short at previous commit (whoops), make chancemax at crate double, replace player to user for key and balance commands ( offline giving rewards + checking balances) , add event to prevent key placement , spinner view prevent players picking rewards --- src/main/java/com/codehusky/huskycrates/HuskyCrates.java | 3 +++ .../com/codehusky/huskycrates/command/BalanceCommand.java | 7 ++----- .../java/com/codehusky/huskycrates/command/KeyCommand.java | 1 + .../com/codehusky/huskycrates/crate/virtual/Crate.java | 2 ++ .../huskycrates/crate/virtual/views/SpinnerView.java | 5 +++-- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/codehusky/huskycrates/HuskyCrates.java b/src/main/java/com/codehusky/huskycrates/HuskyCrates.java index d3e3be9..22afd96 100644 --- a/src/main/java/com/codehusky/huskycrates/HuskyCrates.java +++ b/src/main/java/com/codehusky/huskycrates/HuskyCrates.java @@ -64,6 +64,9 @@ description = "A Crate Plugin for Sponge!", dependencies = {@Dependency(id="huskyui",version = "0.6.0PRE4"), @Dependency(id="placeholderapi", optional = true)}) public class HuskyCrates { + // Added blockplace event to prevent keys to be placed + // Added world load if world is not loaded (prevent hc being loaded before the worlds are, possible fix crates not recognized) + //@Inject public Logger logger; diff --git a/src/main/java/com/codehusky/huskycrates/command/BalanceCommand.java b/src/main/java/com/codehusky/huskycrates/command/BalanceCommand.java index ec2bef2..6698049 100644 --- a/src/main/java/com/codehusky/huskycrates/command/BalanceCommand.java +++ b/src/main/java/com/codehusky/huskycrates/command/BalanceCommand.java @@ -24,11 +24,8 @@ public class BalanceCommand implements CommandExecutor { @Override public CommandResult execute(CommandSource src, CommandContext args) throws CommandException { - /* - .arguments(GenericArguments.optionalWeak(GenericArguments.user(Text.of("player"))), - GenericArguments.optionalWeak(GenericArguments.uuid(Text.of("uuid"))), - GenericArguments.optionalWeak(GenericArguments.string(Text.of("username")))) - */ + + // Added bal others + fix username + change player to user User user = (User)args.getOne(Text.of("player")).orElse(null); // default null UUID uuid = (UUID)args.getOne(Text.of("uuid")).orElse(null); // default null String username = (String)args.getOne(Text.of("username")).orElse(null); diff --git a/src/main/java/com/codehusky/huskycrates/command/KeyCommand.java b/src/main/java/com/codehusky/huskycrates/command/KeyCommand.java index 62d0bca..fd28a07 100644 --- a/src/main/java/com/codehusky/huskycrates/command/KeyCommand.java +++ b/src/main/java/com/codehusky/huskycrates/command/KeyCommand.java @@ -23,6 +23,7 @@ public class KeyCommand implements CommandExecutor { @Override public CommandResult execute(CommandSource src, CommandContext args) throws CommandException { + // change player to user and add "(not enough space)" to getKeyDeliveryFail when issue of not giving key is full inventory Optional crate = args.getOne(Text.of("crate")); Optional key = args.getOne(Text.of("key")); Optional pamount = args.getOne(Text.of("amount")); diff --git a/src/main/java/com/codehusky/huskycrates/crate/virtual/Crate.java b/src/main/java/com/codehusky/huskycrates/crate/virtual/Crate.java index 03670f0..75b46bc 100644 --- a/src/main/java/com/codehusky/huskycrates/crate/virtual/Crate.java +++ b/src/main/java/com/codehusky/huskycrates/crate/virtual/Crate.java @@ -35,6 +35,8 @@ import java.util.*; public class Crate { + + // change slotChanceMax to double, prevent wrong chances being displayed private String id; private String name; diff --git a/src/main/java/com/codehusky/huskycrates/crate/virtual/views/SpinnerView.java b/src/main/java/com/codehusky/huskycrates/crate/virtual/views/SpinnerView.java index 441231e..ab2f953 100644 --- a/src/main/java/com/codehusky/huskycrates/crate/virtual/views/SpinnerView.java +++ b/src/main/java/com/codehusky/huskycrates/crate/virtual/views/SpinnerView.java @@ -35,6 +35,7 @@ public class SpinnerView implements Consumer { private Config config; public SpinnerView(Crate ucrate, Player player, Location loc){ + // Added if-clause at interrupt, to prevent players from "picking" a reward by closing gui this.crate = ucrate; if(this.crate.isScrambled()){ this.crate = ucrate.getScrambledCrate(); @@ -56,12 +57,12 @@ public SpinnerView(Crate ucrate, Player player, Location loc){ .setInterrupt(() -> { if(rewardGiven) return; try { - // check if player has won, otherwise give the slot of selected slot + 4 (start from 1 if max is succeeded) + // check if player has won, otherwise give the slot of selected slot + 4 (restarts when max slots is succeeded) // prevents player from picking their reward if(hasWon) { crate.getSlot(selectedSlot).rewardPlayer(player, this.physicalLocation); }else { - crate.getSlot(selectedSlot+4 %crate.getSlots().size()).rewardPlayer(player, this.physicalLocation); + crate.getSlot(selectedSlot+4 %(crate.getSlots().size()-1)).rewardPlayer(player, this.physicalLocation); } player.playSound(SoundTypes.ENTITY_EXPERIENCE_ORB_PICKUP, player.getLocation().getPosition(), 0.5); }catch (Exception e){ From 4ad4f6dc9a11344e549c88f72367b8e945d021ad Mon Sep 17 00:00:00 2001 From: Gamefreak2302 Date: Thu, 24 Jun 2021 16:05:22 +0200 Subject: [PATCH 3/3] Remove world detect (not working) --- src/main/java/com/codehusky/huskycrates/HuskyCrates.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/com/codehusky/huskycrates/HuskyCrates.java b/src/main/java/com/codehusky/huskycrates/HuskyCrates.java index 22afd96..505b80e 100644 --- a/src/main/java/com/codehusky/huskycrates/HuskyCrates.java +++ b/src/main/java/com/codehusky/huskycrates/HuskyCrates.java @@ -65,7 +65,6 @@ dependencies = {@Dependency(id="huskyui",version = "0.6.0PRE4"), @Dependency(id="placeholderapi", optional = true)}) public class HuskyCrates { // Added blockplace event to prevent keys to be placed - // Added world load if world is not loaded (prevent hc being loaded before the worlds are, possible fix crates not recognized) //@Inject public Logger logger; @@ -335,12 +334,6 @@ private boolean checkOrInitalizeDirectory(Path path){ @Listener public void gameStarted(GameStartedServerEvent event) { logger.info("Loading Crates..."); - // load unloaded worlds. ( try to avoid the invalid world error) - Sponge.getServer().getWorlds().forEach(w -> { - if(!w.isLoaded()) { - Sponge.getServer().loadWorld(w.getUniqueId()); - } - }); loadConfig();