mirror of
https://github.com/BentoBoxWorld/Boxed.git
synced 2024-12-11 14:37:52 +01:00
Adds auto scoring for advancements
Gives higher scores thus enabling bigger boxes.
This commit is contained in:
parent
b8778bcf3a
commit
5c3d40a3ad
5
pom.xml
5
pom.xml
@ -146,6 +146,11 @@
|
|||||||
<version>${spigot.version}</version>
|
<version>${spigot.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.spigotmc</groupId>
|
||||||
|
<artifactId>plugin-annotations</artifactId>
|
||||||
|
<version>1.2.3-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
<!-- Mockito (Unit testing) -->
|
<!-- Mockito (Unit testing) -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.mockito</groupId>
|
<groupId>org.mockito</groupId>
|
||||||
|
@ -7,6 +7,8 @@ import java.util.Map;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.advancement.Advancement;
|
import org.bukkit.advancement.Advancement;
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
@ -63,7 +65,18 @@ public class AdvancementsManager {
|
|||||||
addon.logError("advancements.yml cannot be found! " + e.getLocalizedMessage());
|
addon.logError("advancements.yml cannot be found! " + e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
// DEBUG - lists all advancements to console
|
||||||
|
int scoreTotal = 0;
|
||||||
|
Iterator<Advancement> ad = Bukkit.getServer().advancementIterator();
|
||||||
|
while (ad.hasNext()) {
|
||||||
|
Advancement a = ad.next();
|
||||||
|
int score = getScore(a);
|
||||||
|
BentoBox.getInstance().logDebug(" 'minecraft:" + a.getKey().getKey() + "': " + score);
|
||||||
|
scoreTotal += score;
|
||||||
|
}
|
||||||
|
BentoBox.getInstance().logDebug("Sum total = " + scoreTotal);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -176,7 +189,7 @@ public class AdvancementsManager {
|
|||||||
// Wrong world
|
// Wrong world
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int score = getScore(advancement.getKey().toString());
|
int score = getScore(advancement);
|
||||||
if (score == 0) {
|
if (score == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -215,24 +228,45 @@ public class AdvancementsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the score for this advancement
|
* Get the score for this advancement namespace key
|
||||||
* @param string - advancement key as stored in the config file
|
* @param key advancement namespace key
|
||||||
* @return score of advancement, or default values if the key is not in the file
|
* @return score or 0 if this key is unknown.
|
||||||
*/
|
*/
|
||||||
public int getScore(String string) {
|
public int getScore(String key) {
|
||||||
String adv = "advancements." + string;
|
Advancement a = Bukkit.getAdvancement(NamespacedKey.fromString(key));
|
||||||
// Check score of advancement
|
return a == null ? 0 : getScore(a);
|
||||||
if (advConfig.contains(adv)) {
|
|
||||||
return advConfig.getInt(adv, this.unknownAdvChange);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the score for this advancement
|
||||||
|
* @param a - advancement
|
||||||
|
* @return score of advancement, or 0 if cannot be worked out
|
||||||
|
*/
|
||||||
|
public int getScore(Advancement a) {
|
||||||
|
String adv = "advancements." + a.getKey().getKey();
|
||||||
// Unknowns
|
// Unknowns
|
||||||
if (adv.endsWith("/root")) {
|
if (adv.endsWith("/root")) {
|
||||||
return advConfig.getInt("settings.default-root-increase");
|
return advConfig.getInt("settings.default-root-increase");
|
||||||
}
|
}
|
||||||
if (adv.contains("minecraft:recipes")) {
|
if (adv.contains("recipes")) {
|
||||||
return this.unknownRecipeChange;
|
return this.unknownRecipeChange;
|
||||||
}
|
}
|
||||||
|
if (advConfig.getBoolean("settings.automatic-scoring")) {
|
||||||
|
if (!a.getKey().getKey().contains("recipes") && a.getDisplay() != null) {
|
||||||
|
float x = a.getDisplay().getX();
|
||||||
|
float y = a.getDisplay().getY();
|
||||||
|
int score = (int) Math.round(Math.sqrt(x * x + y * y));
|
||||||
|
return score;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (advConfig.contains(adv)) {
|
||||||
|
return advConfig.getInt(adv, this.unknownAdvChange);
|
||||||
|
}
|
||||||
|
|
||||||
return this.unknownAdvChange;
|
return this.unknownAdvChange;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,13 @@
|
|||||||
package world.bentobox.boxed;
|
package world.bentobox.boxed;
|
||||||
|
|
||||||
|
import org.bukkit.plugin.java.annotation.plugin.ApiVersion;
|
||||||
|
import org.bukkit.plugin.java.annotation.plugin.Plugin;
|
||||||
|
|
||||||
import world.bentobox.bentobox.api.addons.Addon;
|
import world.bentobox.bentobox.api.addons.Addon;
|
||||||
import world.bentobox.bentobox.api.addons.Pladdon;
|
import world.bentobox.bentobox.api.addons.Pladdon;
|
||||||
|
|
||||||
|
@Plugin(name="Boxed", version="1.0")
|
||||||
|
@ApiVersion(ApiVersion.Target.v1_17)
|
||||||
public class BoxedPladdon extends Pladdon {
|
public class BoxedPladdon extends Pladdon {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -51,6 +51,10 @@ public class AdminPlaceStructureCommand extends CompositeCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canExecute(User user, String label, List<String> args) {
|
public boolean canExecute(User user, String label, List<String> args) {
|
||||||
|
// Initialize
|
||||||
|
sr = StructureRotation.NONE;
|
||||||
|
mirror = Mirror.NONE;
|
||||||
|
|
||||||
// Check world
|
// Check world
|
||||||
if (!((Boxed)getAddon()).inWorld(getWorld())) {
|
if (!((Boxed)getAddon()).inWorld(getWorld())) {
|
||||||
user.sendMessage("boxed.admin.place.wrong-world");
|
user.sendMessage("boxed.admin.place.wrong-world");
|
||||||
@ -119,7 +123,7 @@ public class AdminPlaceStructureCommand extends CompositeCommand {
|
|||||||
int z = args.size() == 1 || args.get(3).equals("~") ? user.getLocation().getBlockZ() : Integer.valueOf(args.get(3).trim());
|
int z = args.size() == 1 || args.get(3).equals("~") ? user.getLocation().getBlockZ() : Integer.valueOf(args.get(3).trim());
|
||||||
Location spot = new Location(user.getWorld(), x, y, z);
|
Location spot = new Location(user.getWorld(), x, y, z);
|
||||||
s.place(spot, true, sr, mirror, -1, 1, new Random());
|
s.place(spot, true, sr, mirror, -1, 1, new Random());
|
||||||
NewAreaListener.removeJigsaw(spot, s, sr);
|
NewAreaListener.removeJigsaw(spot, s, sr, tag.getKey());
|
||||||
saveStructure(spot, tag, user, sr, mirror);
|
saveStructure(spot, tag, user, sr, mirror);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -179,23 +179,23 @@ public class NewAreaListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void LoadChunksAsync(Item item) {
|
private void LoadChunksAsync(Item item) {
|
||||||
pasting = true;
|
pasting = true;
|
||||||
item.structure().place(item.location(), true, item.rot(), item.mirror(), -1, 1, new Random());
|
item.structure().place(item.location(), true, item.rot(), item.mirror(), -1, 1, new Random());
|
||||||
addon.log(item.name() + " placed at " + item.location().getWorld().getName() + " " + Util.xyz(item.location().toVector()));
|
addon.log(item.name() + " placed at " + item.location().getWorld().getName() + " " + Util.xyz(item.location().toVector()));
|
||||||
// Find it
|
// Find it
|
||||||
removeJigsaw(item.location(), item.structure(), item.rot());
|
removeJigsaw(item.location(), item.structure(), item.rot(), item.name());
|
||||||
pasting = false;
|
pasting = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes Jigsaw blocks from a placed structure
|
* Removes Jigsaw blocks from a placed structure. Fills underwater ruins with water.
|
||||||
* @param loc - location where the structure was placed
|
* @param loc - location where the structure was placed
|
||||||
* @param structure - structure that was placed
|
* @param structure - structure that was placed
|
||||||
* @param structureRotation - rotation of structure
|
* @param structureRotation - rotation of structure
|
||||||
|
* @param key
|
||||||
*/
|
*/
|
||||||
public static void removeJigsaw(Location loc, Structure structure, StructureRotation structureRotation) {
|
public static void removeJigsaw(Location loc, Structure structure, StructureRotation structureRotation, String key) {
|
||||||
Location otherCorner = switch (structureRotation) {
|
Location otherCorner = switch (structureRotation) {
|
||||||
|
|
||||||
case CLOCKWISE_180 -> loc.clone().add(new Vector(-structure.getSize().getX(), structure.getSize().getY(), -structure.getSize().getZ()));
|
case CLOCKWISE_180 -> loc.clone().add(new Vector(-structure.getSize().getX(), structure.getSize().getY(), -structure.getSize().getZ()));
|
||||||
@ -219,6 +219,10 @@ public class NewAreaListener implements Listener {
|
|||||||
} else if (b.getType().equals(Material.STRUCTURE_BLOCK)) {
|
} else if (b.getType().equals(Material.STRUCTURE_BLOCK)) {
|
||||||
processStructureBlock(b);
|
processStructureBlock(b);
|
||||||
}
|
}
|
||||||
|
// Set water blocks for underwater ruins
|
||||||
|
if (key.contains("underwater_ruin") && b.getType().equals(Material.AIR)) {
|
||||||
|
b.setType(Material.WATER);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +0,0 @@
|
|||||||
name: Pladdon
|
|
||||||
main: world.bentobox.boxed.BoxedPladdon
|
|
||||||
version: ${version}
|
|
||||||
api-version: 1.17
|
|
||||||
description: Minecraft in a box
|
|
||||||
author: tastybento
|
|
||||||
depend:
|
|
||||||
- BentoBox
|
|
@ -5,7 +5,8 @@ normal:
|
|||||||
-17,56,0: shipwreck/rightsideup_full_degraded,CLOCKWISE_180
|
-17,56,0: shipwreck/rightsideup_full_degraded,CLOCKWISE_180
|
||||||
16,67,13: village/plains/houses/plains_cartographer_1
|
16,67,13: village/plains/houses/plains_cartographer_1
|
||||||
-66,63,17: igloo/top
|
-66,63,17: igloo/top
|
||||||
-34,52,-35: underwater_ruin/warm_1
|
-34,52,-35: underwater_ruin/warm_2
|
||||||
|
-25,46,-61: underwater_ruin/big_warm_4,COUNTERCLOCKWISE_90,NONE
|
||||||
33,69,-34: village/savanna/town_centers/savanna_meeting_point_1
|
33,69,-34: village/savanna/town_centers/savanna_meeting_point_1
|
||||||
26,70,-41: village/savanna/houses/savanna_medium_house_2,NONE,NONE
|
26,70,-41: village/savanna/houses/savanna_medium_house_2,NONE,NONE
|
||||||
42,69,-21: village/savanna/houses/savanna_large_farm_2,NONE,NONE
|
42,69,-21: village/savanna/houses/savanna_large_farm_2,NONE,NONE
|
||||||
@ -28,6 +29,11 @@ normal:
|
|||||||
-26,70,33: village/snowy/houses/snowy_library_1,CLOCKWISE_180,NONE
|
-26,70,33: village/snowy/houses/snowy_library_1,CLOCKWISE_180,NONE
|
||||||
-31,71,30: village/plains/villagers/unemployed,CLOCKWISE_180,NONE
|
-31,71,30: village/plains/villagers/unemployed,CLOCKWISE_180,NONE
|
||||||
-3,65,84: village/plains/villagers/unemployed,CLOCKWISE_180,NONE
|
-3,65,84: village/plains/villagers/unemployed,CLOCKWISE_180,NONE
|
||||||
|
-50,71,50: village/snowy/houses/snowy_medium_house_2,COUNTERCLOCKWISE_90,NONE
|
||||||
|
-52,72,33: village/snowy/houses/snowy_farm_1,COUNTERCLOCKWISE_90,NONE
|
||||||
|
-28,63,47: village/snowy/snowy_lamp_post_01,COUNTERCLOCKWISE_90,NONE
|
||||||
|
-6,64,52: village/snowy/houses/snowy_small_house_3,COUNTERCLOCKWISE_90,NONE
|
||||||
|
40,73,-3: village/savanna/houses/savanna_small_house_1,CLOCKWISE_180
|
||||||
|
|
||||||
nether:
|
nether:
|
||||||
16,32,0: bastion/bridge/starting_pieces/entrance
|
16,32,0: bastion/bridge/starting_pieces/entrance
|
||||||
|
Loading…
Reference in New Issue
Block a user