Skip to content

Commit

Permalink
可以锁合成
Browse files Browse the repository at this point in the history
  • Loading branch information
westernat committed Jan 6, 2024
1 parent 79175b0 commit 9a6c2bf
Show file tree
Hide file tree
Showing 9 changed files with 95 additions and 15 deletions.
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ ServerEvents.advancement((event) => {
// Remove an exist advancement
event.remove("minecraft:story/lava_bucket");

// modify an exist advancement
// Modify an exist advancement
event.get("minecraft:story/smelt_iron")
.modifyDisplay((displayBuilder) => displayBuilder.setIcon("diamond_pickaxe"))
.addChild("child2", (childBuilder) => {
Expand All @@ -64,5 +64,8 @@ ServerEvents.advancement((event) => {
})
.criteria((criteriaBuilder) => criteriaBuilder.add("jump", jump5times))
});

// Lock recipe by advancement
event.lock("stone_slab", "minecraft:story/smelt_iron")
})
```
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ minecraft_version=1.19.2
yarn_mappings=1.19.2+build.28
loader_version=0.15.3
# Mod Properties
mod_version=1902fabric-1.5.6
mod_version=1902fabric-1.6.0
maven_group=org.mesdag.advjs
archives_base_name=AdvJS
# Dependencies
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/mesdag/advjs/AdvJS.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

public class AdvJS implements ModInitializer {
public static final Logger LOGGER = LoggerFactory.getLogger("advjs");
public static final EventHandler ADVANCEMENT = ServerEvents.GROUP.server("advancement", () -> AdvCreateEvent.class);
public static final EventHandler ADVANCEMENT = ServerEvents.GROUP.server("advancement", () -> AdvancementEvent.class);
public static final Path EXAMPLE = KubeJSPaths.SERVER_SCRIPTS.resolve("advancement.js");

@Override
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/org/mesdag/advjs/AdvJSPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ private static void example(boolean generate) {
// Remove an exist advancement
event.remove("minecraft:story/lava_bucket")
// modify an exist advancement
// Modify an exist advancement
event.get("minecraft:story/smelt_iron")
.modifyDisplay((displayBuilder) => displayBuilder.setIcon("diamond_pickaxe"))
.addChild("child2", (childBuilder) => {
Expand All @@ -105,6 +105,9 @@ private static void example(boolean generate) {
})
.criteria((criteriaBuilder) => criteriaBuilder.add("jump", jump5times))
});
// Lock recipe by advancement
event.lock("stone_slab", "minecraft:story/smelt_iron")
})
"""
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,19 @@

import dev.latvian.mods.kubejs.event.EventJS;
import dev.latvian.mods.kubejs.typings.Info;
import dev.latvian.mods.kubejs.typings.Param;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
import org.mesdag.advjs.adv.AdvBuilder;
import org.mesdag.advjs.adv.AdvGetter;
import org.mesdag.advjs.predicate.Predicate;
import org.mesdag.advjs.trigger.Trigger;
import org.mesdag.advjs.util.MinMaxBoundsProvider;

import static org.mesdag.advjs.adv.Data.LOCK_MAP;
import static org.mesdag.advjs.adv.Data.REMOVES;

public class AdvCreateEvent extends EventJS {
public class AdvancementEvent extends EventJS {
@Info("Trigger required in advancement.")
public final Trigger TRIGGER = new Trigger();
@Info("Predicate required in trigger.")
Expand All @@ -33,4 +36,22 @@ public void remove(Identifier remove) {
public AdvGetter get(Identifier path) {
return new AdvGetter(path);
}

@Info(value = "Lock recipe by advancement.",
params = {
@Param(name = "toLock"),
@Param(name = "lockBy")
})
public void lock(ItemStack toLock, Identifier lockBy) {
LOCK_MAP.put(toLock.getItem(), lockBy);
}

@Info(value = "Lock recipe by advancement.",
params = {
@Param(name = "toLock"),
@Param(name = "lockBy")
})
public void lock(ItemStack toLock, AdvBuilder lockBy) {
LOCK_MAP.put(toLock.getItem(), lockBy.getSavePath());
}
}
2 changes: 2 additions & 0 deletions src/main/java/org/mesdag/advjs/adv/Data.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.mesdag.advjs.adv;

import net.minecraft.item.Item;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.Identifier;
Expand All @@ -11,6 +12,7 @@ public class Data {
public static final ArrayList<Identifier> REMOVES = new ArrayList<>();
public static final HashMap<Identifier, AdvGetter> GETTER_MAP = new HashMap<>();
public static final HashMap<Identifier, AdvBuilder> BUILDER_MAP = new HashMap<>();
public static final HashMap<Item, Identifier> LOCK_MAP = new HashMap<>();
public static final Text ATTENTION = Text.translatable("advjs.attention").formatted(Formatting.RED);
public static final Text ATTENTION_DESC = Text.translatable("advjs.attention.desc");
static final Identifier DEFAULT_BACKGROUND = new Identifier("textures/gui/advancements/backgrounds/stone.png");
Expand Down
50 changes: 50 additions & 0 deletions src/main/java/org/mesdag/advjs/mixin/ScreenHandlerMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package org.mesdag.advjs.mixin;

import net.minecraft.advancement.Advancement;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.CraftingResultInventory;
import net.minecraft.item.Item;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.slot.Slot;
import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.collection.DefaultedList;
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 static org.mesdag.advjs.adv.Data.LOCK_MAP;

@Mixin(ScreenHandler.class)
public abstract class ScreenHandlerMixin {
@Shadow
@Final
public DefaultedList<Slot> slots;

@Inject(method = "internalOnSlotClick", at = @At("HEAD"), cancellable = true)
private void advJS$checkAdvancement(int slotIndex, int button, SlotActionType actionType, PlayerEntity player, CallbackInfo ci) {
if (slotIndex < 0) {
return;
}

Slot slot = slots.get(slotIndex);
if (!(slot.inventory instanceof CraftingResultInventory)) {
return;
}

if (actionType == SlotActionType.PICKUP && player instanceof ServerPlayerEntity serverPlayer) {
Item result = slot.getStack().getItem();
MinecraftServer server = serverPlayer.getServer();
if (server != null && LOCK_MAP.containsKey(result)) {
Advancement advancement = server.getAdvancementLoader().get(LOCK_MAP.get(result));
if (advancement != null && !serverPlayer.getAdvancementTracker().getProgress(advancement).isDone()) {
ci.cancel();
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
import net.minecraft.server.ServerAdvancementLoader;
import net.minecraft.server.function.CommandFunction;
import net.minecraft.util.Identifier;
import org.mesdag.advjs.AdvCreateEvent;
import org.mesdag.advjs.AdvJS;
import org.mesdag.advjs.AdvJSPlugin;
import org.mesdag.advjs.AdvancementEvent;
import org.mesdag.advjs.adv.*;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
Expand All @@ -37,7 +37,7 @@ public abstract class ServerAdvancementLoaderMixin {
method = "apply(Ljava/util/Map;Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/util/profiler/Profiler;)V",
at = @At(value = "INVOKE", target = "Lnet/minecraft/advancement/AdvancementManager;load(Ljava/util/Map;)V"))
private Map<Identifier, Advancement.Builder> advjs$reload(Map<Identifier, Advancement.Builder> map) {
AdvJS.ADVANCEMENT.post(new AdvCreateEvent());
AdvJS.ADVANCEMENT.post(new AdvancementEvent());
advJS$remove(map);
advJS$modify(map, conditionManager);
advJS$add(map);
Expand Down
17 changes: 9 additions & 8 deletions src/main/resources/advjs.mixins.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
{
"required": true,
"package": "org.mesdag.advjs.mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [
"ServerAdvancementLoaderMixin"
],
"injectors": {
"defaultRequire": 1
"required": true,
"package": "org.mesdag.advjs.mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [
"ScreenHandlerMixin",
"ServerAdvancementLoaderMixin"
],
"injectors": {
"defaultRequire": 1
}
}

0 comments on commit 9a6c2bf

Please sign in to comment.