Skip to content

Commit

Permalink
2.6.4 (#5170)
Browse files Browse the repository at this point in the history
  • Loading branch information
TheLimeGlass committed Nov 22, 2022
1 parent fab2a4b commit df0dbcd
Show file tree
Hide file tree
Showing 52 changed files with 796 additions and 1,853 deletions.
6 changes: 5 additions & 1 deletion .github/workflows/java-17-builds.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
name: Java 17 CI (MC 1.17+)

on: [push, pull_request]
on:
push:
branches:
- master
- 'dev/**'

jobs:
build:
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/java-8-builds.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
name: Java 8 CI (MC 1.13-1.16)

on: [push, pull_request]
on:
push:
branches:
- master
- 'dev/**'

jobs:
build:
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/legacy-tests.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
name: Legacy Java 8 (MC 1.9.4-1.12.2)

on: [push, pull_request]
on:
push:
branches:
- master
- 'dev/**'

jobs:
build:
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
groupid=ch.njol
name=skript
version=2.6.3
version=2.6.4
jarName=Skript.jar
testEnv=java17/paper-1.19
testEnvJavaVersion=17
35 changes: 9 additions & 26 deletions src/main/java/ch/njol/skript/aliases/ItemData.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,39 +79,18 @@ public static class OldItemData {

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

static final MaterialRegistry materialRegistry;

private static final boolean SPAWN_EGG_META_EXISTS = Skript.classExists("org.bukkit.inventory.meta.SpawnEggMeta");
private static final boolean HAS_NEW_SKULL_META_METHODS = Skript.methodExists(SkullMeta.class, "getOwningPlayer");

// Load or create material registry
static {
Gson gson = new GsonBuilder().registerTypeAdapterFactory(EnumTypeAdapter.factory).serializeNulls().create();
Path materialsFile = Paths.get(Skript.getInstance().getDataFolder().getAbsolutePath(), "materials.json");
if (Files.exists(materialsFile)) {
String content = null;
try {
content = new String(Files.readAllBytes(materialsFile), StandardCharsets.UTF_8);
Files.delete(materialsFile);
} catch (IOException e) {
Skript.exception(e, "Loading material registry failed!");
}
if (content != null) {
String[] names = gson.fromJson(content, String[].class);
assert names != null;
materialRegistry = MaterialRegistry.load(names);
} else {
materialRegistry = new MaterialRegistry();
Skript.exception(e, "Failed to remove legacy material registry file!");
}
} else {
materialRegistry = new MaterialRegistry();
}

// Always rewrite material registry, in case some updates got applied to it
String content = gson.toJson(materialRegistry.getMaterials());
try {
Files.write(materialsFile, content.getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
Skript.exception(e, "Saving material registry failed!");
}
}

Expand Down Expand Up @@ -142,7 +121,7 @@ public static class OldItemData {
* allow comparing it against other blocks.
*/
@Nullable
transient BlockValues blockValues;
BlockValues blockValues;

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

private static final Material[] materials = Material.values();

@Override
public void deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException {
this.type = materialRegistry.getMaterial(fields.getAndRemovePrimitive("id", int.class));
this.type = materials[fields.getAndRemovePrimitive("id", int.class)];
ItemMeta meta = fields.getAndRemoveObject("meta", ItemMeta.class);
fields.setFields(this); // Everything but ItemStack and Material

// Initialize ItemStack
this.stack = new ItemStack(type);
stack.setItemMeta(meta); // Just set meta to it

fields.setFields(this); // Everything but ItemStack and Material
}

/**
Expand Down
1 change: 1 addition & 0 deletions src/main/java/ch/njol/skript/aliases/MaterialRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
* Manages Skript's own number -> Material mappings. They are used to save
* items as variables.
*/
@Deprecated
public class MaterialRegistry {

static final boolean newMaterials = Skript.isRunningMinecraft(1, 13);
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/ch/njol/skript/bukkitutil/ItemUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -138,5 +138,20 @@ public static boolean itemStacksEqual(final @Nullable ItemStack is1, final @Null
return is1.getType() == is2.getType() && ItemUtils.getDamage(is1) == ItemUtils.getDamage(is2)
&& is1.getItemMeta().equals(is2.getItemMeta());
}

// Only 1.15 and versions after have Material#isAir method
private static final boolean IS_AIR_EXISTS = Skript.methodExists(Material.class, "isAir");
// Version 1.14 have multiple air types but no Material#isAir method
private static final boolean OTHER_AIR_EXISTS = Skript.isRunningMinecraft(1, 14);

public static boolean isAir(Material type) {
if (IS_AIR_EXISTS) {
return type.isAir();
} else if (OTHER_AIR_EXISTS) {
return type == Material.AIR || type == Material.CAVE_AIR || type == Material.VOID_AIR;
}
// All versions prior to 1.14 only have 1 air type
return type == Material.AIR;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,14 @@
*/
package ch.njol.skript.bukkitutil.block;

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.aliases.MatchQuality;
import ch.njol.yggdrasil.YggdrasilSerializable.YggdrasilExtendedSerializable;
import org.eclipse.jdt.annotation.Nullable;

/**
* Contains all data block has that is needed for comparisions.
*/
public abstract class BlockValues {
public abstract class BlockValues implements YggdrasilExtendedSerializable {

public abstract boolean isDefault();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/
package ch.njol.skript.bukkitutil.block;

import java.io.StreamCorruptedException;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
Expand All @@ -30,12 +31,15 @@
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.ItemFlags;
import ch.njol.skript.aliases.MatchQuality;
import ch.njol.skript.bukkitutil.ItemUtils;
import ch.njol.skript.variables.Variables;
import ch.njol.yggdrasil.Fields;

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

@SuppressWarnings({"deprecation"})
private class MagicBlockValues extends BlockValues {
private static class MagicBlockValues extends BlockValues {

static {
Variables.yggdrasil.registerSingleClass(MagicBlockValues.class, "MagicBlockValues");
}

private Material id;
short data;
private int itemFlags;

/**
* Used for serialization
*/
private MagicBlockValues() {}

public MagicBlockValues(BlockState block) {
this.id = ItemUtils.asItem(block.getType());
this.data = block.getRawData(); // Some black magic here, please look away...
Expand Down Expand Up @@ -131,6 +144,24 @@ public MatchQuality match(BlockValues other) {
return MatchQuality.DIFFERENT;
}
}

@Override
public Fields serialize() {
Fields fields = new Fields();
fields.putPrimitive("material", id.ordinal());
fields.putPrimitive("data", data);
fields.putPrimitive("itemFlags", itemFlags);
return fields;
}

private static final Material[] materials = Material.values();

@Override
public void deserialize(@NonNull Fields fields) throws StreamCorruptedException {
this.id = materials[fields.getAndRemovePrimitive("id", int.class)];
this.data = fields.getAndRemovePrimitive("data", Short.class);
this.itemFlags = fields.getAndRemovePrimitive("itemFlags", Integer.class);
}
}

private static class MagicBlockSetter implements BlockSetter {
Expand Down
47 changes: 40 additions & 7 deletions src/main/java/ch/njol/skript/bukkitutil/block/NewBlockCompat.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
*/
package ch.njol.skript.bukkitutil.block;

import java.util.Map;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.Aliases;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.aliases.MatchQuality;
import ch.njol.skript.variables.Variables;
import ch.njol.yggdrasil.Fields;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
Expand All @@ -34,12 +38,11 @@
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.Aliases;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.aliases.MatchQuality;
import java.io.StreamCorruptedException;
import java.util.Map;

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

private static class NewBlockValues extends BlockValues {

static {
Variables.yggdrasil.registerSingleClass(NewBlockValues.class, "NewBlockValues");
}

Material type;
BlockData data;
boolean isDefault;

public NewBlockValues(Material type, BlockData data, boolean isDefault) {
if (type != data.getMaterial())
throw new IllegalArgumentException("'type' does not match material of 'data'");
this.type = type;
this.data = data;
this.isDefault = isDefault;
}

/**
* For Serialization - INTERNAL USAGE ONLY!!
*/
private NewBlockValues() { }

@Override
public boolean isDefault() {
Expand Down Expand Up @@ -104,7 +118,26 @@ public MatchQuality match(BlockValues other) {
return MatchQuality.DIFFERENT;
}
}


@Override
public Fields serialize() {
Fields fields = new Fields();
fields.putObject("data", data.getAsString());
fields.putPrimitive("isDefault", isDefault);
return fields;
}

@Override
public void deserialize(@NonNull Fields fields) throws StreamCorruptedException {
String data = fields.getObject("data", String.class);
boolean isDefault = fields.getPrimitive("isDefault", Boolean.class);
if (data == null)
throw new StreamCorruptedException("'data' is missing.");

this.data = Bukkit.createBlockData(data);
this.type = this.data.getMaterial();
this.isDefault = isDefault;
}
}

private static class NewBlockSetter implements BlockSetter {
Expand Down

0 comments on commit df0dbcd

Please sign in to comment.