prevent diamond block as building block in SpaceSnake
This commit is contained in:
@@ -3,6 +3,7 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.spaceSnake;
|
|||||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||||
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
|
||||||
import eu.mhsl.minenet.minigames.score.PointsWinScore;
|
import eu.mhsl.minenet.minigames.score.PointsWinScore;
|
||||||
|
import eu.mhsl.minenet.minigames.util.MaterialUtil;
|
||||||
import io.github.togar2.pvp.events.FinalAttackEvent;
|
import io.github.togar2.pvp.events.FinalAttackEvent;
|
||||||
import io.github.togar2.pvp.events.PrepareAttackEvent;
|
import io.github.togar2.pvp.events.PrepareAttackEvent;
|
||||||
import io.github.togar2.pvp.feature.CombatFeatures;
|
import io.github.togar2.pvp.feature.CombatFeatures;
|
||||||
@@ -16,7 +17,6 @@ import net.minestom.server.event.player.PlayerBlockPlaceEvent;
|
|||||||
import net.minestom.server.event.player.PlayerMoveEvent;
|
import net.minestom.server.event.player.PlayerMoveEvent;
|
||||||
import net.minestom.server.instance.WorldBorder;
|
import net.minestom.server.instance.WorldBorder;
|
||||||
import net.minestom.server.instance.block.Block;
|
import net.minestom.server.instance.block.Block;
|
||||||
import net.minestom.server.instance.block.BlockFace;
|
|
||||||
import net.minestom.server.inventory.PlayerInventory;
|
import net.minestom.server.inventory.PlayerInventory;
|
||||||
import net.minestom.server.item.ItemStack;
|
import net.minestom.server.item.ItemStack;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
@@ -85,7 +85,7 @@ public class SpaceSnake extends StatelessGame {
|
|||||||
PlayState state = new PlayState(
|
PlayState state = new PlayState(
|
||||||
new AtomicInteger(3),
|
new AtomicInteger(3),
|
||||||
new ArrayDeque<>(List.of(spawn)),
|
new ArrayDeque<>(List.of(spawn)),
|
||||||
this.getRandomBlock(),
|
MaterialUtil.getRandomFullBlock(material -> !material.equals(Material.DIAMOND_BLOCK)),
|
||||||
spawn
|
spawn
|
||||||
);
|
);
|
||||||
this.playerBlocks.put(p, state);
|
this.playerBlocks.put(p, state);
|
||||||
@@ -138,18 +138,6 @@ public class SpaceSnake extends StatelessGame {
|
|||||||
inventory.addItemStack(ItemStack.of(this.playerBlocks.get(player).blockType, 64));
|
inventory.addItemStack(ItemStack.of(this.playerBlocks.get(player).blockType, 64));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Material getRandomBlock() {
|
|
||||||
List<Material> blocks = Material.values().stream()
|
|
||||||
.filter(Material::isBlock)
|
|
||||||
.filter(material -> material.registry().block() != null)
|
|
||||||
.filter(material -> material.block().isSolid())
|
|
||||||
.filter(material -> Arrays.stream(BlockFace.values())
|
|
||||||
.allMatch(face -> material.block().registry().collisionShape().isFaceFull(face))
|
|
||||||
)
|
|
||||||
.toList();
|
|
||||||
return blocks.get(this.rnd.nextInt(blocks.size()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void spawnPowerUp() {
|
private void spawnPowerUp() {
|
||||||
Pos spawnPos = new Pos(this.posInBoundsW.get(), this.posInBoundsH.get(), this.posInBoundsW.get());
|
Pos spawnPos = new Pos(this.posInBoundsW.get(), this.posInBoundsH.get(), this.posInBoundsW.get());
|
||||||
Entity display = new Entity(EntityType.BLOCK_DISPLAY);
|
Entity display = new Entity(EntityType.BLOCK_DISPLAY);
|
||||||
|
@@ -1,9 +1,28 @@
|
|||||||
package eu.mhsl.minenet.minigames.util;
|
package eu.mhsl.minenet.minigames.util;
|
||||||
|
|
||||||
|
import net.minestom.server.instance.block.BlockFace;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class MaterialUtil {
|
public class MaterialUtil {
|
||||||
public static Material fromString(String name, Material def) {
|
public static Material fromString(String name, Material def) {
|
||||||
return Material.values().stream().filter(material -> material.name().equals(name)).findFirst().orElse(def);
|
return Material.values().stream().filter(material -> material.name().equals(name)).findFirst().orElse(def);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Material getRandomFullBlock(Predicate<Material> filter) {
|
||||||
|
List<Material> blocks = Material.values().stream()
|
||||||
|
.filter(filter)
|
||||||
|
.filter(Material::isBlock)
|
||||||
|
.filter(material -> material.block().isSolid())
|
||||||
|
.filter(material -> Arrays.stream(BlockFace.values())
|
||||||
|
.allMatch(face -> material.block().registry().collisionShape().isFaceFull(face))
|
||||||
|
)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return blocks.get(ThreadLocalRandom.current().nextInt(blocks.size()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user