Skip to content

Commit df0dbcd

Browse files
authored
2.6.4 (#5170)
1 parent fab2a4b commit df0dbcd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+796
-1853
lines changed

.github/workflows/java-17-builds.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
name: Java 17 CI (MC 1.17+)
22

3-
on: [push, pull_request]
3+
on:
4+
push:
5+
branches:
6+
- master
7+
- 'dev/**'
48

59
jobs:
610
build:

.github/workflows/java-8-builds.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
name: Java 8 CI (MC 1.13-1.16)
22

3-
on: [push, pull_request]
3+
on:
4+
push:
5+
branches:
6+
- master
7+
- 'dev/**'
48

59
jobs:
610
build:

.github/workflows/legacy-tests.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
name: Legacy Java 8 (MC 1.9.4-1.12.2)
22

3-
on: [push, pull_request]
3+
on:
4+
push:
5+
branches:
6+
- master
7+
- 'dev/**'
48

59
jobs:
610
build:

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
groupid=ch.njol
22
name=skript
3-
version=2.6.3
3+
version=2.6.4
44
jarName=Skript.jar
55
testEnv=java17/paper-1.19
66
testEnvJavaVersion=17

src/main/java/ch/njol/skript/aliases/ItemData.java

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -79,39 +79,18 @@ public static class OldItemData {
7979

8080
static final ItemFactory itemFactory = Bukkit.getServer().getItemFactory();
8181

82-
static final MaterialRegistry materialRegistry;
83-
8482
private static final boolean SPAWN_EGG_META_EXISTS = Skript.classExists("org.bukkit.inventory.meta.SpawnEggMeta");
8583
private static final boolean HAS_NEW_SKULL_META_METHODS = Skript.methodExists(SkullMeta.class, "getOwningPlayer");
8684

8785
// Load or create material registry
8886
static {
89-
Gson gson = new GsonBuilder().registerTypeAdapterFactory(EnumTypeAdapter.factory).serializeNulls().create();
9087
Path materialsFile = Paths.get(Skript.getInstance().getDataFolder().getAbsolutePath(), "materials.json");
9188
if (Files.exists(materialsFile)) {
92-
String content = null;
9389
try {
94-
content = new String(Files.readAllBytes(materialsFile), StandardCharsets.UTF_8);
90+
Files.delete(materialsFile);
9591
} catch (IOException e) {
96-
Skript.exception(e, "Loading material registry failed!");
97-
}
98-
if (content != null) {
99-
String[] names = gson.fromJson(content, String[].class);
100-
assert names != null;
101-
materialRegistry = MaterialRegistry.load(names);
102-
} else {
103-
materialRegistry = new MaterialRegistry();
92+
Skript.exception(e, "Failed to remove legacy material registry file!");
10493
}
105-
} else {
106-
materialRegistry = new MaterialRegistry();
107-
}
108-
109-
// Always rewrite material registry, in case some updates got applied to it
110-
String content = gson.toJson(materialRegistry.getMaterials());
111-
try {
112-
Files.write(materialsFile, content.getBytes(StandardCharsets.UTF_8));
113-
} catch (IOException e) {
114-
Skript.exception(e, "Saving material registry failed!");
11594
}
11695
}
11796

@@ -142,7 +121,7 @@ public static class OldItemData {
142121
* allow comparing it against other blocks.
143122
*/
144123
@Nullable
145-
transient BlockValues blockValues;
124+
BlockValues blockValues;
146125

147126
/**
148127
* Whether this represents an item (that definitely cannot have
@@ -613,20 +592,24 @@ public boolean matchPlain(ItemData other) {
613592
@Override
614593
public Fields serialize() throws NotSerializableException {
615594
Fields fields = new Fields(this); // ItemStack is transient, will be ignored
616-
fields.putPrimitive("id", materialRegistry.getId(type));
595+
fields.putPrimitive("id", type.ordinal());
617596
fields.putObject("meta", stack.getItemMeta());
618597
return fields;
619598
}
620599

600+
private static final Material[] materials = Material.values();
601+
621602
@Override
622603
public void deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException {
623-
this.type = materialRegistry.getMaterial(fields.getAndRemovePrimitive("id", int.class));
604+
this.type = materials[fields.getAndRemovePrimitive("id", int.class)];
624605
ItemMeta meta = fields.getAndRemoveObject("meta", ItemMeta.class);
625606
fields.setFields(this); // Everything but ItemStack and Material
626607

627608
// Initialize ItemStack
628609
this.stack = new ItemStack(type);
629610
stack.setItemMeta(meta); // Just set meta to it
611+
612+
fields.setFields(this); // Everything but ItemStack and Material
630613
}
631614

632615
/**

src/main/java/ch/njol/skript/aliases/MaterialRegistry.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
* Manages Skript's own number -> Material mappings. They are used to save
3030
* items as variables.
3131
*/
32+
@Deprecated
3233
public class MaterialRegistry {
3334

3435
static final boolean newMaterials = Skript.isRunningMinecraft(1, 13);

src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,5 +138,20 @@ public static boolean itemStacksEqual(final @Nullable ItemStack is1, final @Null
138138
return is1.getType() == is2.getType() && ItemUtils.getDamage(is1) == ItemUtils.getDamage(is2)
139139
&& is1.getItemMeta().equals(is2.getItemMeta());
140140
}
141+
142+
// Only 1.15 and versions after have Material#isAir method
143+
private static final boolean IS_AIR_EXISTS = Skript.methodExists(Material.class, "isAir");
144+
// Version 1.14 have multiple air types but no Material#isAir method
145+
private static final boolean OTHER_AIR_EXISTS = Skript.isRunningMinecraft(1, 14);
146+
147+
public static boolean isAir(Material type) {
148+
if (IS_AIR_EXISTS) {
149+
return type.isAir();
150+
} else if (OTHER_AIR_EXISTS) {
151+
return type == Material.AIR || type == Material.CAVE_AIR || type == Material.VOID_AIR;
152+
}
153+
// All versions prior to 1.14 only have 1 air type
154+
return type == Material.AIR;
155+
}
141156

142157
}

src/main/java/ch/njol/skript/bukkitutil/block/BlockValues.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,14 @@
1818
*/
1919
package ch.njol.skript.bukkitutil.block;
2020

21-
import org.bukkit.Material;
22-
import org.bukkit.block.Block;
23-
import org.eclipse.jdt.annotation.Nullable;
24-
2521
import ch.njol.skript.aliases.MatchQuality;
22+
import ch.njol.yggdrasil.YggdrasilSerializable.YggdrasilExtendedSerializable;
23+
import org.eclipse.jdt.annotation.Nullable;
2624

2725
/**
2826
* Contains all data block has that is needed for comparisions.
2927
*/
30-
public abstract class BlockValues {
28+
public abstract class BlockValues implements YggdrasilExtendedSerializable {
3129

3230
public abstract boolean isDefault();
3331

src/main/java/ch/njol/skript/bukkitutil/block/MagicBlockCompat.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package ch.njol.skript.bukkitutil.block;
2020

21+
import java.io.StreamCorruptedException;
2122
import java.lang.invoke.MethodHandle;
2223
import java.lang.invoke.MethodHandles;
2324
import java.lang.invoke.MethodType;
@@ -30,12 +31,15 @@
3031
import org.bukkit.entity.FallingBlock;
3132
import org.bukkit.entity.Player;
3233
import org.bukkit.inventory.ItemStack;
34+
import org.eclipse.jdt.annotation.NonNull;
3335
import org.eclipse.jdt.annotation.Nullable;
3436

3537
import ch.njol.skript.Skript;
3638
import ch.njol.skript.aliases.ItemFlags;
3739
import ch.njol.skript.aliases.MatchQuality;
3840
import ch.njol.skript.bukkitutil.ItemUtils;
41+
import ch.njol.skript.variables.Variables;
42+
import ch.njol.yggdrasil.Fields;
3943

4044
/**
4145
* Block compatibility implemented with magic numbers. No other choice until
@@ -68,12 +72,21 @@ public class MagicBlockCompat implements BlockCompat {
6872
}
6973

7074
@SuppressWarnings({"deprecation"})
71-
private class MagicBlockValues extends BlockValues {
75+
private static class MagicBlockValues extends BlockValues {
76+
77+
static {
78+
Variables.yggdrasil.registerSingleClass(MagicBlockValues.class, "MagicBlockValues");
79+
}
7280

7381
private Material id;
7482
short data;
7583
private int itemFlags;
7684

85+
/**
86+
* Used for serialization
87+
*/
88+
private MagicBlockValues() {}
89+
7790
public MagicBlockValues(BlockState block) {
7891
this.id = ItemUtils.asItem(block.getType());
7992
this.data = block.getRawData(); // Some black magic here, please look away...
@@ -131,6 +144,24 @@ public MatchQuality match(BlockValues other) {
131144
return MatchQuality.DIFFERENT;
132145
}
133146
}
147+
148+
@Override
149+
public Fields serialize() {
150+
Fields fields = new Fields();
151+
fields.putPrimitive("material", id.ordinal());
152+
fields.putPrimitive("data", data);
153+
fields.putPrimitive("itemFlags", itemFlags);
154+
return fields;
155+
}
156+
157+
private static final Material[] materials = Material.values();
158+
159+
@Override
160+
public void deserialize(@NonNull Fields fields) throws StreamCorruptedException {
161+
this.id = materials[fields.getAndRemovePrimitive("id", int.class)];
162+
this.data = fields.getAndRemovePrimitive("data", Short.class);
163+
this.itemFlags = fields.getAndRemovePrimitive("itemFlags", Integer.class);
164+
}
134165
}
135166

136167
private static class MagicBlockSetter implements BlockSetter {

src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@
1818
*/
1919
package ch.njol.skript.bukkitutil.block;
2020

21-
import java.util.Map;
22-
21+
import ch.njol.skript.Skript;
22+
import ch.njol.skript.aliases.Aliases;
23+
import ch.njol.skript.aliases.ItemType;
24+
import ch.njol.skript.aliases.MatchQuality;
25+
import ch.njol.skript.variables.Variables;
26+
import ch.njol.yggdrasil.Fields;
2327
import org.bukkit.Bukkit;
2428
import org.bukkit.Location;
2529
import org.bukkit.Material;
@@ -34,12 +38,11 @@
3438
import org.bukkit.entity.FallingBlock;
3539
import org.bukkit.entity.Player;
3640
import org.bukkit.inventory.ItemStack;
41+
import org.eclipse.jdt.annotation.NonNull;
3742
import org.eclipse.jdt.annotation.Nullable;
3843

39-
import ch.njol.skript.Skript;
40-
import ch.njol.skript.aliases.Aliases;
41-
import ch.njol.skript.aliases.ItemType;
42-
import ch.njol.skript.aliases.MatchQuality;
44+
import java.io.StreamCorruptedException;
45+
import java.util.Map;
4346

4447
/**
4548
* 1.13+ block compat.
@@ -48,15 +51,26 @@ public class NewBlockCompat implements BlockCompat {
4851

4952
private static class NewBlockValues extends BlockValues {
5053

54+
static {
55+
Variables.yggdrasil.registerSingleClass(NewBlockValues.class, "NewBlockValues");
56+
}
57+
5158
Material type;
5259
BlockData data;
5360
boolean isDefault;
5461

5562
public NewBlockValues(Material type, BlockData data, boolean isDefault) {
63+
if (type != data.getMaterial())
64+
throw new IllegalArgumentException("'type' does not match material of 'data'");
5665
this.type = type;
5766
this.data = data;
5867
this.isDefault = isDefault;
5968
}
69+
70+
/**
71+
* For Serialization - INTERNAL USAGE ONLY!!
72+
*/
73+
private NewBlockValues() { }
6074

6175
@Override
6276
public boolean isDefault() {
@@ -104,7 +118,26 @@ public MatchQuality match(BlockValues other) {
104118
return MatchQuality.DIFFERENT;
105119
}
106120
}
107-
121+
122+
@Override
123+
public Fields serialize() {
124+
Fields fields = new Fields();
125+
fields.putObject("data", data.getAsString());
126+
fields.putPrimitive("isDefault", isDefault);
127+
return fields;
128+
}
129+
130+
@Override
131+
public void deserialize(@NonNull Fields fields) throws StreamCorruptedException {
132+
String data = fields.getObject("data", String.class);
133+
boolean isDefault = fields.getPrimitive("isDefault", Boolean.class);
134+
if (data == null)
135+
throw new StreamCorruptedException("'data' is missing.");
136+
137+
this.data = Bukkit.createBlockData(data);
138+
this.type = this.data.getMaterial();
139+
this.isDefault = isDefault;
140+
}
108141
}
109142

110143
private static class NewBlockSetter implements BlockSetter {

0 commit comments

Comments
 (0)