Working Restrictions
This commit is contained in:
@@ -1,18 +1,22 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config;
|
||||
|
||||
import com.extollit.linalg.mutable.Vec2d;
|
||||
import eu.mhsl.minenet.minigames.instance.game.Game;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
|
||||
import eu.mhsl.minenet.minigames.util.InventoryItemAlignment;
|
||||
import eu.mhsl.minenet.minigames.util.TextUtil;
|
||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||
import net.kyori.adventure.sound.Sound;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
|
||||
import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
|
||||
import net.minestom.server.inventory.InventoryType;
|
||||
import net.minestom.server.inventory.click.ClickType;
|
||||
import net.minestom.server.inventory.condition.InventoryConditionResult;
|
||||
@@ -36,10 +40,8 @@ public class GameConfigurationInventory extends InteractableInventory {
|
||||
this.factory = factory;
|
||||
|
||||
room.eventNode()
|
||||
.addListener(AddEntityToInstanceEvent.class, addEntityToInstanceEvent -> {
|
||||
System.out.println("UPDATE");
|
||||
updatePlayButton();
|
||||
});
|
||||
.addListener(AddEntityToInstanceEvent.class, addEntityToInstanceEvent -> MinecraftServer.getSchedulerManager().scheduleNextTick(this::updatePlayButton))
|
||||
.addListener(RemoveEntityFromInstanceEvent.class, removeEntityFromInstanceEvent -> MinecraftServer.getSchedulerManager().scheduleNextTick(this::updatePlayButton));
|
||||
|
||||
ConfigManager config = factory.configuration();
|
||||
|
||||
@@ -70,18 +72,22 @@ public class GameConfigurationInventory extends InteractableInventory {
|
||||
ItemStack.builder(Material.BARRIER).displayName(Component.text("Keine Optionen")).lore(TextUtil.autoWrap("Für dieses Spiel sind keine Einstellungen verfügbar!")).build(),
|
||||
31
|
||||
);
|
||||
return;
|
||||
|
||||
} else {
|
||||
int offset = 18;
|
||||
InventoryItemAlignment itemAlignment = new InventoryItemAlignment(config.getAll().size(), 3);
|
||||
for(Option<?> item : config.getAll()) {
|
||||
Vec2d current = itemAlignment.next();
|
||||
System.out.println(current.x + " : " + current.y);
|
||||
map.put((int) (offset + (current.y * 9) + current.x), item);
|
||||
|
||||
setDummyItem(
|
||||
item.getCurrent(),
|
||||
(int) (offset + (current.y * 9) + current.x)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
int pos = 18;
|
||||
for(Option<?> item : config.getAll()) {
|
||||
map.put(pos, item);
|
||||
|
||||
setDummyItem(
|
||||
item.getCurrent(),
|
||||
pos++
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -104,6 +110,8 @@ public class GameConfigurationInventory extends InteractableInventory {
|
||||
RestrictionHandler restrictionHandler = factory.globalRestrictions();
|
||||
RestrictionData restrictionData = new RestrictionData(room);
|
||||
|
||||
System.out.println("UpdatePlayButton:" + restrictionHandler.canPlay(restrictionData));
|
||||
|
||||
if(restrictionHandler.canPlay(restrictionData)) {
|
||||
|
||||
setClickableItem(
|
||||
@@ -132,11 +140,17 @@ public class GameConfigurationInventory extends InteractableInventory {
|
||||
.build(),
|
||||
8,
|
||||
itemClick -> {
|
||||
if(restrictionHandler.canPlay(restrictionData)) {
|
||||
updatePlayButton();
|
||||
return;
|
||||
}
|
||||
itemClick.getPlayer().playSound(Sound.sound(SoundEvent.ENTITY_SILVERFISH_DEATH, Sound.Source.AMBIENT, 1f, 1f));
|
||||
},
|
||||
false
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.MineNetInstance;
|
||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||
|
||||
public class RestrictionData {
|
||||
final private Room instance;
|
||||
final private Room room;
|
||||
|
||||
public RestrictionData(Room instance) {
|
||||
this.instance = instance;
|
||||
public RestrictionData(Room room) {
|
||||
this.room = room;
|
||||
}
|
||||
|
||||
public MineNetInstance getInstance() {
|
||||
return instance;
|
||||
public Room getRoom() {
|
||||
return room;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,8 +25,9 @@ public class RestrictionHandler {
|
||||
}
|
||||
|
||||
public boolean canPlay(RestrictionData data) {
|
||||
if(restrictions.size() < 1) return true;
|
||||
return this.restrictions.stream()
|
||||
.anyMatch(iRestriction -> !iRestriction.calculate(data).getType().equals(Restriction.Type.OK));
|
||||
.noneMatch(iRestriction -> iRestriction.calculate(data).getType().equals(Restriction.Type.FAIL));
|
||||
}
|
||||
|
||||
public List<String> getWarnings(RestrictionData data) {
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData;
|
||||
|
||||
public class MaximalPlayeramountGameRestriction implements IRestriction {
|
||||
private int max;
|
||||
|
||||
public MaximalPlayeramountGameRestriction(int max) {
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Restriction calculate(RestrictionData data) {
|
||||
return new Restriction(
|
||||
"Minimal players needed",
|
||||
"Minimal players",
|
||||
null,
|
||||
data.getRoom().getAllMembers().size() > this.max ? Restriction.Type.FAIL : Restriction.Type.OK
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,11 @@ package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.comm
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData;
|
||||
import kotlin.Result;
|
||||
|
||||
public class MaximalPlayeramountRestriction implements IRestriction {
|
||||
public class MaximalPlayeramountInstanceRestriction implements IRestriction {
|
||||
final private int max;
|
||||
|
||||
public MaximalPlayeramountRestriction(int max) {
|
||||
public MaximalPlayeramountInstanceRestriction(int max) {
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
@@ -18,7 +17,7 @@ public class MaximalPlayeramountRestriction implements IRestriction {
|
||||
"Maxplayers",
|
||||
"Maximale spieleranzahl",
|
||||
null,
|
||||
data.getInstance().getPlayers().size() > this.max ? Restriction.Type.FAIL : Restriction.Type.OK
|
||||
data.getRoom().getPlayers().size() > this.max ? Restriction.Type.FAIL : Restriction.Type.OK
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData;
|
||||
|
||||
import javax.xml.transform.OutputKeys;
|
||||
|
||||
public class MinimalPlayeramountGameRestriction implements IRestriction {
|
||||
private int min;
|
||||
|
||||
public MinimalPlayeramountGameRestriction(int min) {
|
||||
this.min = min;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Restriction calculate(RestrictionData data) {
|
||||
return new Restriction(
|
||||
"Minimal players",
|
||||
"minimal Players needed",
|
||||
null,
|
||||
data.getRoom().getAllMembers().size() < this.min ? Restriction.Type.FAIL : Restriction.Type.OK
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -4,10 +4,10 @@ import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.IRest
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.Restriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionData;
|
||||
|
||||
public class MinimalPlayeramountRestriction implements IRestriction {
|
||||
public class MinimalPlayeramountInstanceRestriction implements IRestriction {
|
||||
final int min;
|
||||
|
||||
public MinimalPlayeramountRestriction(int min) {
|
||||
public MinimalPlayeramountInstanceRestriction(int min) {
|
||||
this.min = min;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ public class MinimalPlayeramountRestriction implements IRestriction {
|
||||
"Minimal players",
|
||||
"Minimal amount of players needed",
|
||||
null,
|
||||
data.getInstance().getPlayers().size() < min ? Restriction.Type.FAIL : Restriction.Type.OK
|
||||
data.getRoom().getPlayers().size() < min ? Restriction.Type.FAIL : Restriction.Type.OK
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -4,9 +4,12 @@ import eu.mhsl.minenet.minigames.instance.game.minigame.Minigame;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.ConfigManager;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.Option;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.common.NumericOption;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.RestrictionHandler;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MaximalPlayeramountRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MinimalPlayeramountRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MaximalPlayeramountGameRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MaximalPlayeramountInstanceRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MinimalPlayeramountGameRestriction;
|
||||
import eu.mhsl.minenet.minigames.instance.game.minigame.config.restriction.common.MinimalPlayeramountInstanceRestriction;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
@@ -20,14 +23,15 @@ public class StickFightFactory implements GameFactory {
|
||||
|
||||
@Override
|
||||
public ConfigManager configuration() {
|
||||
return null;
|
||||
return new ConfigManager()
|
||||
.addOption(new NumericOption("lenght", Material.SANDSTONE, "Länge", 5, 7, 9, 11));
|
||||
}
|
||||
|
||||
@Override
|
||||
public RestrictionHandler globalRestrictions() {
|
||||
return new RestrictionHandler()
|
||||
.addRestriction(new MinimalPlayeramountRestriction(2))
|
||||
.addRestriction(new MaximalPlayeramountRestriction(4));
|
||||
.addRestriction(new MinimalPlayeramountGameRestriction(2))
|
||||
.addRestriction(new MaximalPlayeramountGameRestriction(4));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user