diff --git a/gradle.properties b/gradle.properties index f233790..d1833af 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1G # Mod Properties - mod_version = 0.12 + mod_version = 0.20 maven_group = com.github.zly2006 archives_base_name = carpet-sls-addition diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java b/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java index a90919a..dc4d5de 100644 --- a/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java +++ b/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java @@ -2,7 +2,6 @@ package com.github.zly2006.carpetslsaddition; import carpet.api.settings.Rule; import carpet.api.settings.RuleCategory; -import net.minecraft.block.RedstoneBlock; import static com.github.zly2006.carpetslsaddition.ServerMain.CARPET_ID; @@ -55,5 +54,5 @@ public class SLSCarpetSettings { public static boolean optimizedOnDragonRespawn = false; @Rule(categories = {CARPET_ID, RuleCategory.FEATURE}) - public static boolean printStackTraceOnVillagerSpawn = false; + public static boolean elytraCraftable = false; } diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/datapack/MixinVanillaResourcePackProvider.java b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/datapack/MixinVanillaResourcePackProvider.java new file mode 100644 index 0000000..fff9687 --- /dev/null +++ b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/datapack/MixinVanillaResourcePackProvider.java @@ -0,0 +1,36 @@ +package com.github.zly2006.carpetslsaddition.mixin.datapack; + +import com.github.zly2006.carpetslsaddition.SLSCarpetSettings; +import net.minecraft.resource.ResourcePackProfile; +import net.minecraft.resource.ResourceType; +import net.minecraft.resource.VanillaResourcePackProvider; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.util.function.BiConsumer; +import java.util.function.Function; + +@Mixin(VanillaResourcePackProvider.class) +public abstract class MixinVanillaResourcePackProvider { + @Shadow protected abstract void forEachProfile(@Nullable Path namespacedPath, BiConsumer> consumer); + + @Shadow @Final private ResourceType type; + + @Inject( + method = "forEachProfile(Ljava/util/function/BiConsumer;)V", + at = @At("RETURN") + ) + private void andMe(BiConsumer> consumer, CallbackInfo ci) throws URISyntaxException { + if (type == ResourceType.SERVER_DATA) { + Path path = Path.of(SLSCarpetSettings.class.getClassLoader().getResource("data/slsa/datapacks").toURI()); + this.forEachProfile(path, consumer); + } + } +} diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/elytra/MixinElytraItem.java b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/elytra/MixinElytraItem.java new file mode 100644 index 0000000..7b45a9c --- /dev/null +++ b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/elytra/MixinElytraItem.java @@ -0,0 +1,25 @@ +package com.github.zly2006.carpetslsaddition.mixin.elytra; + +import com.github.zly2006.carpetslsaddition.SLSCarpetSettings; +import net.minecraft.item.*; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(ElytraItem.class) +public abstract class MixinElytraItem extends Item implements Equipment { + public MixinElytraItem(Settings settings) { + super(settings); + } + + @Override + public boolean hasRecipeRemainder() { + return SLSCarpetSettings.elytraCraftable; + } + + @Override + public ItemStack getRecipeRemainder(ItemStack stack) { + if (SLSCarpetSettings.elytraCraftable) { + return stack; + } + else return ItemStack.EMPTY; + } +} diff --git a/src/main/resources/assets/slsaddition/lang/en_us.json b/src/main/resources/assets/slsaddition/lang/en_us.json index 54e314e..39f13e2 100644 --- a/src/main/resources/assets/slsaddition/lang/en_us.json +++ b/src/main/resources/assets/slsaddition/lang/en_us.json @@ -50,5 +50,6 @@ "carpet.rule.maxUpdateQueueSize.extra.0": "If set to a value not greater than 0, turn off this function and run according to Vanilla", "carpet.rule.maxUpdateQueueSize.extra.1": "Otherwise, when the number of single updates exceeds the set value, an OutOfMemoryError will be thrown to generate update suppression", "carpet.rule.emptyShulkerBoxStack.extra.0": "Empty shulker boxes can stack in a player's inventory or hand", - "carpet.rule.emptyShulkerBoxStack.extra.1": "Empty shulker boxes will not stack in other inventories, such as chests or hoppers" + "carpet.rule.emptyShulkerBoxStack.extra.1": "Empty shulker boxes will not stack in other inventories, such as chests or hoppers", + "carpet.rule.elytraCraftable.desc": "Make elytra craftable for Minecraft 1.20.6+ (eltra wont disappear when crafting)" } diff --git a/src/main/resources/data/slsa/datapacks/elytra-craftable/data/elytra-craftable/recipe/elytra.json b/src/main/resources/data/slsa/datapacks/elytra-craftable/data/elytra-craftable/recipe/elytra.json new file mode 100644 index 0000000..a7f99f8 --- /dev/null +++ b/src/main/resources/data/slsa/datapacks/elytra-craftable/data/elytra-craftable/recipe/elytra.json @@ -0,0 +1,26 @@ +{ + "type": "crafting_shaped", + "pattern": [ + "XAX", + "XKX", + "XBX" + ], + "key": { + "A": { + "item": "minecraft:end_crystal" + }, + "B": { + "item": "minecraft:nether_star" + }, + "X": { + "item": "minecraft:phantom_membrane" + }, + "K": { + "item": "minecraft:elytra" + } + }, + "category": "equipment", + "result": { + "id": "minecraft:elytra" + } +} \ No newline at end of file diff --git a/src/main/resources/data/slsa/datapacks/elytra-craftable/pack.mcmeta b/src/main/resources/data/slsa/datapacks/elytra-craftable/pack.mcmeta new file mode 100644 index 0000000..b571c87 --- /dev/null +++ b/src/main/resources/data/slsa/datapacks/elytra-craftable/pack.mcmeta @@ -0,0 +1,8 @@ +{ + "pack": { + "description": { + "translate": "Elytra Craftable by zly2006, made for Starlight Server and licensed under MIT License." + }, + "pack_format": 48 + } +} diff --git a/src/main/resources/slsaddition.mixins.json b/src/main/resources/slsaddition.mixins.json index ff80346..1493a4f 100644 --- a/src/main/resources/slsaddition.mixins.json +++ b/src/main/resources/slsaddition.mixins.json @@ -13,6 +13,8 @@ "block.BlockPatternTestTransformInvoker", "block.MixinRedstoneWireBlock", "carpet.MixinSettingsManager", + "datapack.MixinVanillaResourcePackProvider", + "elytra.MixinElytraItem", "entity.MixinArmorStandEntity", "entity.MixinEnderDragonFight", "entity.MixinEndermanGoal",