Skip to content

Commit b89254c

Browse files
Fix banners in shelves and held by armour stands
1 parent 6e673a5 commit b89254c

File tree

10 files changed

+140
-61
lines changed

10 files changed

+140
-61
lines changed

src/main/java/me/eccentric_nz/TARDIS/artron/ArtronCondenserListener.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ public void onCondenserClose(InventoryCloseEvent event) {
228228
for (ItemStack is : didntFit.values()) {
229229
player.getWorld().dropItem(player.getLocation(), is);
230230
}
231-
// }
232231
Tardis tardis = rs.getTardis();
233232
if (tardis == null) {
234233
plugin.debug("TARDIS data was null!");
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package me.eccentric_nz.TARDIS.commands.dev;
2+
3+
import com.google.gson.JsonObject;
4+
import com.google.gson.JsonParser;
5+
import me.eccentric_nz.TARDIS.TARDIS;
6+
import me.eccentric_nz.TARDIS.schematic.setters.ShelfSetter;
7+
import org.bukkit.Material;
8+
import org.bukkit.block.Block;
9+
import org.bukkit.block.BlockFace;
10+
import org.bukkit.entity.Player;
11+
12+
public class ShelfCommand {
13+
14+
private final TARDIS plugin;
15+
16+
public ShelfCommand(TARDIS plugin) {
17+
this.plugin = plugin;
18+
}
19+
20+
public boolean putItems(Player player) {
21+
Block targetBlock = player.getTargetBlock(plugin.getGeneralKeeper().getTransparent(), 16);
22+
Block up = targetBlock.getRelative(BlockFace.UP);
23+
up.setType(Material.ACACIA_SHELF);
24+
String items = "{\"items\":[{\"item\":\"WHITE_BANNER\",\"banner\":{\"base_colour\":\"WHITE\",\"patterns\":[{\"pattern\":\"square_top_left\",\"pattern_colour\":\"BLACK\"},{\"pattern\":\"stripe_center\",\"pattern_colour\":\"BLACK\"},{\"pattern\":\"stripe_bottom\",\"pattern_colour\":\"BLACK\"},{\"pattern\":\"border\",\"pattern_colour\":\"WHITE\"}]}},{},{\"item\":\"WHITE_BANNER\",\"banner\":{\"base_colour\":\"WHITE\",\"patterns\":[{\"pattern\":\"stripe_left\",\"pattern_colour\":\"BLACK\"},{\"pattern\":\"stripe_top\",\"pattern_colour\":\"BLACK\"},{\"pattern\":\"stripe_bottom\",\"pattern_colour\":\"BLACK\"},{\"pattern\":\"stripe_right\",\"pattern_colour\":\"BLACK\"},{\"pattern\":\"border\",\"pattern_colour\":\"WHITE\"}]}}]}";
25+
JsonObject json = JsonParser.parseString(items).getAsJsonObject();
26+
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> ShelfSetter.stock(up, json.get("items").getAsJsonArray()), 3L);
27+
return true;
28+
}
29+
}

src/main/java/me/eccentric_nz/TARDIS/commands/dev/TARDISDevCommand.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public class TARDISDevCommand implements CommandExecutor {
9494
"ntc", "nms",
9595
"painting", "plurals",
9696
"recipe", "regen", "registry", "roman", "rooms",
97-
"screen", "skin", "snapshot", "staircase", "stats", "systree",
97+
"screen", "shelf", "skin", "snapshot", "staircase", "stats", "systree",
9898
"tis", "tips", "tree",
9999
"unmount"
100100
);
@@ -120,6 +120,12 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String
120120
}
121121
if (args.length == 1) {
122122
switch (first) {
123+
case "shelf" -> {
124+
if (sender instanceof Player player) {
125+
return new ShelfCommand(plugin).putItems(player);
126+
}
127+
return true;
128+
}
123129
case "bleach" -> {
124130
if (sender instanceof Player player) {
125131
return new BleachCommand(plugin).setDisplay(player);
@@ -185,6 +191,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String
185191
PotionEffect resistance = new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 360000, 3, false, false);
186192
skeleton.addPotionEffect(resistance);
187193
}
194+
return true;
188195
}
189196
case "dialog" -> {
190197
if (sender instanceof Player player) {

src/main/java/me/eccentric_nz/TARDIS/commands/dev/TARDISDevTabComplete.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public class TARDISDevTabComplete extends TARDISCompleter implements TabComplete
5555
"ntc", "nms",
5656
"painting", "plurals",
5757
"recipe", "regen", "registry", "roman", "rooms",
58-
"screen", "skin", "snapshot", "staircase", "stats", "systree",
58+
"screen", "shelf", "skin", "snapshot", "staircase", "stats", "systree",
5959
"tis", "tips", "tree", "trim",
6060
"unmount"
6161
);

src/main/java/me/eccentric_nz/TARDIS/schematic/actions/SchematicPaster.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,14 @@ public void run() {
197197
}
198198
}, 1L);
199199
}
200-
case OAK_SHELF -> {
200+
case OAK_SHELF, SPRUCE_SHELF, BIRCH_SHELF, JUNGLE_SHELF, ACACIA_SHELF, DARK_OAK_SHELF, MANGROVE_SHELF,
201+
CHERRY_SHELF, PALE_OAK_SHELF, BAMBOO_SHELF, CRIMSON_SHELF, WARPED_SHELF -> {
201202
block.setBlockData(data, true);
202203
if (plugin.getBlockLogger().isLogging()) {
203204
plugin.getBlockLogger().logPlacement(block);
204205
}
205206
if (col.has("items")) {
206-
ShelfSetter.stock(block, col.get("items").getAsJsonArray());
207+
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, ()-> ShelfSetter.stock(block, col.get("items").getAsJsonArray()),3L);
207208
}
208209
}
209210
case PALE_OAK_FENCE -> {

src/main/java/me/eccentric_nz/TARDIS/schematic/getters/ArmourStandGetter.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,11 @@ public static JsonObject getJson(ArmorStand stand, int minx, int miny, int minz)
8686
object.add("boots", ItemStackGetter.getJson(boots));
8787
}
8888
// get main hand
89-
ItemStack mainhand = equipment.getBoots();
90-
if (mainhand != null) {
91-
object.add("mainhand", ItemStackGetter.getJson(mainhand));
92-
}
89+
ItemStack mainhand = equipment.getItemInMainHand();
90+
object.add("mainhand", ItemStackGetter.getJson(mainhand));
9391
// get off hand
94-
ItemStack offhand = equipment.getBoots();
95-
if (offhand != null) {
96-
object.add("offhand", ItemStackGetter.getJson(offhand));
97-
}
92+
ItemStack offhand = equipment.getItemInOffHand();
93+
object.add("offhand", ItemStackGetter.getJson(offhand));
9894
return object;
9995
}
10096
}

src/main/java/me/eccentric_nz/TARDIS/schematic/getters/BannerGetter.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import com.google.gson.JsonObject;
55
import io.papermc.paper.registry.RegistryAccess;
66
import io.papermc.paper.registry.RegistryKey;
7+
import org.bukkit.Material;
78
import org.bukkit.block.Banner;
89
import org.bukkit.block.BlockState;
10+
import org.bukkit.inventory.meta.BannerMeta;
11+
import org.bukkit.inventory.meta.ShieldMeta;
912

1013
public class BannerGetter {
1114

@@ -25,4 +28,36 @@ public static JsonObject getJson(BlockState b) {
2528
state.add("patterns", patterns);
2629
return state;
2730
}
31+
32+
public static JsonObject getJson(ShieldMeta banner) {
33+
JsonObject state = new JsonObject();
34+
state.addProperty("base_colour", banner.getBaseColor().toString());
35+
JsonArray patterns = new JsonArray();
36+
if (banner.numberOfPatterns() > 0) {
37+
banner.getPatterns().forEach((p) -> {
38+
JsonObject pattern = new JsonObject();
39+
pattern.addProperty("pattern", RegistryAccess.registryAccess().getRegistry(RegistryKey.BANNER_PATTERN).getKey(p.getPattern()).getKey());
40+
pattern.addProperty("pattern_colour", p.getColor().toString());
41+
patterns.add(pattern);
42+
});
43+
}
44+
state.add("patterns", patterns);
45+
return state;
46+
}
47+
48+
public static JsonObject getJson(BannerMeta banner, Material material) {
49+
JsonObject state = new JsonObject();
50+
state.addProperty("base_colour", material.toString().replace("_BANNER", ""));
51+
JsonArray patterns = new JsonArray();
52+
if (banner.numberOfPatterns() > 0) {
53+
banner.getPatterns().forEach((p) -> {
54+
JsonObject pattern = new JsonObject();
55+
pattern.addProperty("pattern", RegistryAccess.registryAccess().getRegistry(RegistryKey.BANNER_PATTERN).getKey(p.getPattern()).getKey());
56+
pattern.addProperty("pattern_colour", p.getColor().toString());
57+
patterns.add(pattern);
58+
});
59+
}
60+
state.add("patterns", patterns);
61+
return state;
62+
}
2863
}

src/main/java/me/eccentric_nz/TARDIS/schematic/getters/ItemStackGetter.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
import org.bukkit.Material;
88
import org.bukkit.Tag;
99
import org.bukkit.inventory.ItemStack;
10-
import org.bukkit.inventory.meta.BlockStateMeta;
10+
import org.bukkit.inventory.meta.BannerMeta;
1111
import org.bukkit.inventory.meta.ItemMeta;
12+
import org.bukkit.inventory.meta.ShieldMeta;
1213

1314
public class ItemStackGetter {
1415

@@ -32,8 +33,12 @@ public static JsonObject getJson(ItemStack item) {
3233
}
3334
object.add("lore", lore);
3435
}
35-
if ((Tag.ITEMS_BANNERS.isTagged(type) || type == Material.SHIELD) && im instanceof BlockStateMeta bsm) {
36-
JsonObject state = BannerGetter.getJson(bsm.getBlockState());
36+
if (Tag.ITEMS_BANNERS.isTagged(type) && im instanceof BannerMeta bsm) {
37+
JsonObject state = BannerGetter.getJson(bsm, type);
38+
object.add("banner", state);
39+
}
40+
if (type == Material.SHIELD && im instanceof ShieldMeta bsm) {
41+
JsonObject state = BannerGetter.getJson(bsm);
3742
object.add("banner", state);
3843
}
3944
}

src/main/java/me/eccentric_nz/TARDIS/schematic/setters/ItemStackSetter.java

Lines changed: 48 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
import org.bukkit.DyeColor;
1313
import org.bukkit.Material;
1414
import org.bukkit.NamespacedKey;
15-
import org.bukkit.block.Banner;
1615
import org.bukkit.block.banner.Pattern;
1716
import org.bukkit.block.banner.PatternType;
1817
import org.bukkit.inventory.ItemStack;
19-
import org.bukkit.inventory.meta.BlockStateMeta;
18+
import org.bukkit.inventory.meta.BannerMeta;
2019
import org.bukkit.inventory.meta.ItemMeta;
20+
import org.bukkit.inventory.meta.ShieldMeta;
2121

2222
import java.util.ArrayList;
2323
import java.util.List;
@@ -29,55 +29,61 @@ public static ItemStack build(JsonObject json) {
2929
if (!json.isEmpty()) {
3030
Material material = Material.valueOf(json.get("item").getAsString());
3131
ItemStack is = ItemStack.of(material);
32-
if (is.hasItemMeta()) {
33-
ItemMeta im = is.getItemMeta();
34-
// needed for Time Rotors / Doors
35-
if (json.has("cmd")) {
36-
String cmd = json.get("cmd").getAsString();
37-
if (!cmd.equals("st_johns")) {
38-
NamespacedKey key = new NamespacedKey(TARDIS.plugin, cmd);
39-
im.setItemModel(key);
40-
} else {
41-
im.displayName(Component.text("St John's Logo"));
42-
// frame.setCustomNameVisible(false);
43-
}
44-
}
45-
if (json.has("name")) {
46-
im.displayName(ComponentUtils.fromJson(json.get("name")));
32+
ItemMeta im = is.getItemMeta();
33+
// needed for Time Rotors / Doors
34+
if (json.has("cmd")) {
35+
String cmd = json.get("cmd").getAsString();
36+
if (!cmd.equals("st_johns")) {
37+
NamespacedKey key = new NamespacedKey(TARDIS.plugin, cmd);
38+
im.setItemModel(key);
39+
} else {
40+
im.displayName(Component.text("St John's Logo"));
4741
}
48-
if (json.has("lore")) {
49-
List<Component> lore = new ArrayList<>();
50-
for (JsonElement element : json.get("lore").getAsJsonArray()) {
51-
lore.add(Component.text(element.getAsString()));
52-
}
53-
im.lore(lore);
42+
}
43+
if (json.has("name")) {
44+
im.displayName(ComponentUtils.fromJson(json.get("name")));
45+
}
46+
if (json.has("lore")) {
47+
List<Component> lore = new ArrayList<>();
48+
for (JsonElement element : json.get("lore").getAsJsonArray()) {
49+
lore.add(Component.text(element.getAsString()));
5450
}
51+
im.lore(lore);
52+
}
53+
if (json.has("banner")) {
5554
try {
56-
if (json.has("banner")) {
57-
JsonObject banner = json.get("banner").getAsJsonObject();
55+
JsonObject banner = json.get("banner").getAsJsonObject();
56+
BannerMeta bm = (BannerMeta) im;
57+
ShieldMeta sm = null;
58+
if (material == Material.SHIELD) {
5859
DyeColor baseColour = DyeColor.valueOf(banner.get("base_colour").getAsString());
59-
JsonArray patterns = banner.get("patterns").getAsJsonArray();
60-
List<Pattern> plist = new ArrayList<>();
61-
for (int j = 0; j < patterns.size(); j++) {
62-
JsonObject jo = patterns.get(j).getAsJsonObject();
63-
PatternType pt = RegistryAccess.registryAccess().getRegistry(RegistryKey.BANNER_PATTERN).get(
64-
new NamespacedKey("minecraft", jo.get("pattern").getAsString().toLowerCase(Locale.ROOT))
65-
);
66-
if (pt != null) {
67-
DyeColor dc = DyeColor.valueOf(jo.get("pattern_colour").getAsString());
68-
Pattern p = new Pattern(dc, pt);
69-
plist.add(p);
70-
}
60+
sm = (ShieldMeta) bm;
61+
sm.setBaseColor(baseColour);
62+
}
63+
JsonArray patterns = banner.get("patterns").getAsJsonArray();
64+
List<Pattern> plist = new ArrayList<>();
65+
for (int j = 0; j < patterns.size(); j++) {
66+
JsonObject jo = patterns.get(j).getAsJsonObject();
67+
PatternType pt = RegistryAccess.registryAccess().getRegistry(RegistryKey.BANNER_PATTERN).get(
68+
new NamespacedKey("minecraft", jo.get("pattern").getAsString().toLowerCase(Locale.ROOT))
69+
);
70+
if (pt != null) {
71+
DyeColor dc = DyeColor.valueOf(jo.get("pattern_colour").getAsString());
72+
Pattern p = new Pattern(dc, pt);
73+
plist.add(p);
7174
}
72-
BlockStateMeta bsm = (BlockStateMeta) im;
73-
Banner b = (Banner) bsm.getBlockState();
74-
b.setBaseColor(baseColour);
75-
b.setPatterns(plist);
76-
bsm.setBlockState(b);
75+
}
76+
if (material == Material.SHIELD) {
77+
sm.setPatterns(plist);
78+
is.setItemMeta(sm);
79+
} else { // banner
80+
bm.setPatterns(plist);
81+
is.setItemMeta(bm);
7782
}
7883
} catch (IllegalArgumentException e) {
7984
TARDIS.plugin.getMessenger().message(TARDIS.plugin.getConsole(), TardisModule.WARNING, "Could not create item stack for schematic item frame!");
8085
}
86+
} else {
8187
is.setItemMeta(im);
8288
}
8389
return is;

src/main/java/me/eccentric_nz/TARDIS/schematic/setters/ShelfSetter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,18 @@
44
import com.google.gson.JsonObject;
55
import org.bukkit.block.Block;
66
import org.bukkit.block.Shelf;
7+
import org.bukkit.inventory.Inventory;
78
import org.bukkit.inventory.ItemStack;
89

910
public class ShelfSetter {
1011

1112
public static void stock(Block block, JsonArray items) {
1213
Shelf shelf = (Shelf) block.getState();
14+
Inventory inventory = shelf.getInventory();
1315
for (int i = 0; i < 3; i++) {
1416
JsonObject item = items.get(i).getAsJsonObject();
15-
ItemStack is = ItemStackSetter.build(item.get("item").getAsJsonObject());
16-
shelf.getInventory().getContents()[i] = is;
17+
ItemStack is = ItemStackSetter.build(item);
18+
inventory.setItem(i, is);
1719
}
18-
shelf.update();
1920
}
2021
}

0 commit comments

Comments
 (0)