Skip to content

Commit cf65655

Browse files
committed
Added NotPlace and dump version to 1.3
1. Added NotPlace 2. Dump version to v1.3 3. Modified DeathScreenMixin, from directly invoking requestRespawn to using native onConfirmQuit
1 parent 28c0a6c commit cf65655

File tree

8 files changed

+123
-7
lines changed

8 files changed

+123
-7
lines changed

build.gradle

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ repositories {
1515
maven {
1616
url "https://maven.shedaniel.me"
1717
}
18+
// maven {
19+
// url "https://maven.terraformersmc.com/releases"
20+
// }
1821
maven {
19-
url "https://maven.terraformersmc.com/releases"
22+
url "https://jitpack.io"
2023
}
2124
maven {
22-
url "https://jitpack.io"
25+
url "https://raw.githubusercontent.com/TerraformersMC/Archive/main/releases/"
2326
}
2427
}
2528

@@ -38,7 +41,7 @@ dependencies {
3841
exclude(group: "net.fabricmc.fabric-api");
3942
}
4043

41-
modApi("com.terraformersmc:modmenu:2.0.1")
44+
modApi("com.terraformersmc:modmenu:2.0.2")
4245

4346
// Calculator-lib by Octocynth from Jitpack
4447
def calcLib = "com.github.octocynth:calculator-lib:8c69c67b0e"

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx4G
99
loader_version=0.11.6
1010

1111
# Mod Properties
12-
mod_version = 1.2.0
12+
mod_version = 1.3.0
1313
maven_group = cn.taskeren.minequery
1414
archives_base_name = minequery
1515

src/main/java/cn/taskeren/minequery/MineQueryMod.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,19 @@
22

33
import cn.taskeren.minequery.callback.HarvestCheck;
44
import cn.taskeren.minequery.callback.NotHit;
5+
import cn.taskeren.minequery.callback.NotPlace;
56
import cn.taskeren.minequery.command.CmdCalculator;
67
import cn.taskeren.minequery.command.CmdLocationCalc;
78
import cn.taskeren.minequery.config.MineQueryConfig;
89
import cn.taskeren.minequery.key.KeyToCommand;
910
import me.shedaniel.autoconfig.AutoConfig;
1011
import me.shedaniel.autoconfig.serializer.JanksonConfigSerializer;
1112
import net.fabricmc.api.ClientModInitializer;
13+
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
1214
import net.fabricmc.fabric.api.event.player.AttackBlockCallback;
1315
import net.fabricmc.fabric.api.event.player.AttackEntityCallback;
16+
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
17+
import net.fabricmc.loader.api.FabricLoader;
1418

1519
public class MineQueryMod implements ClientModInitializer {
1620

@@ -24,12 +28,19 @@ public static MineQueryConfig config() {
2428
public void onInitializeClient() {
2529
System.out.println("MineQuery!");
2630

31+
if(FabricLoader.getInstance().isDevelopmentEnvironment()) {
32+
System.out.println("Hopeless");
33+
}
34+
2735
AutoConfig.register(MineQueryConfig.class, JanksonConfigSerializer::new);
2836

2937
AttackBlockCallback.EVENT.register(HarvestCheck.INSTANCE);
3038
AttackEntityCallback.EVENT.register(NotHit.IronGolem.INSTANCE);
3139
AttackEntityCallback.EVENT.register(NotHit.Villager.INSTANCE);
3240

41+
UseBlockCallback.EVENT.register(NotPlace.INSTANCE);
42+
ItemTooltipCallback.EVENT.register(NotPlace.INSTANCE);
43+
3344
CmdCalculator.register();
3445
CmdLocationCalc.register();
3546

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package cn.taskeren.minequery.callback;
2+
3+
import cn.taskeren.minequery.config.MineQueryConfig;
4+
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
5+
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
6+
import net.minecraft.client.item.TooltipContext;
7+
import net.minecraft.entity.player.PlayerEntity;
8+
import net.minecraft.item.BlockItem;
9+
import net.minecraft.item.ItemStack;
10+
import net.minecraft.item.Items;
11+
import net.minecraft.text.Text;
12+
import net.minecraft.text.TranslatableText;
13+
import net.minecraft.util.ActionResult;
14+
import net.minecraft.util.Hand;
15+
import net.minecraft.util.hit.BlockHitResult;
16+
import net.minecraft.util.math.Direction;
17+
import net.minecraft.world.World;
18+
19+
import java.util.List;
20+
21+
import static cn.taskeren.minequery.MineQueryMod.config;
22+
23+
public class NotPlace implements UseBlockCallback, ItemTooltipCallback {
24+
25+
public static final NotPlace INSTANCE = new NotPlace();
26+
27+
private NotPlace() {}
28+
29+
private static boolean validateItemStack(ItemStack stack) {
30+
return stack.isOf(Items.STICK) && stack.getName().getString().equalsIgnoreCase("NotPlace");
31+
}
32+
33+
@Override
34+
public ActionResult interact(PlayerEntity player, World world, Hand hand, BlockHitResult hitResult) {
35+
if(hand != Hand.MAIN_HAND || world.isClient) {
36+
return ActionResult.PASS;
37+
}
38+
39+
MineQueryConfig.NotPlaceConfig opt = config().notPlaceConfig;
40+
41+
ItemStack is = player.getStackInHand(hand);
42+
Direction direction = hitResult.getSide();
43+
if(validateItemStack(is) && player.isSneaking()) {
44+
var flag = opt.toggle(direction);
45+
player.sendMessage(new TranslatableText("text.minequery.notplace.toggle."+(flag ? "prevented" : "allowed"), direction), false);
46+
return ActionResult.SUCCESS;
47+
}
48+
else if(is.getItem() instanceof BlockItem) {
49+
if(opt.isPrevented(direction)) {
50+
return ActionResult.FAIL;
51+
}
52+
}
53+
return ActionResult.PASS;
54+
}
55+
56+
@Override
57+
public void getTooltip(ItemStack stack, TooltipContext context, List<Text> lines) {
58+
if(validateItemStack(stack)) {
59+
MineQueryConfig.NotPlaceConfig opt = config().notPlaceConfig;
60+
for(var direction : Direction.values()) {
61+
var prv = opt.isPrevented(direction);
62+
lines.add(new TranslatableText("text.minequery.notplace.tooltip."+(prv ? "prevented" : "allowed"),
63+
direction.getName()));
64+
}
65+
}
66+
}
67+
}

src/main/java/cn/taskeren/minequery/config/MineQueryConfig.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import me.shedaniel.autoconfig.ConfigData;
66
import me.shedaniel.autoconfig.annotation.Config;
77
import me.shedaniel.autoconfig.annotation.ConfigEntry;
8+
import net.minecraft.util.math.Direction;
89

910
import java.util.ArrayList;
11+
import java.util.EnumMap;
1012

1113
import static cn.taskeren.minequery.key.KeyToCommand.KEY_BINDING_SIZE;
1214

@@ -22,6 +24,9 @@ public class MineQueryConfig implements ConfigData {
2224
@ConfigEntry.Gui.CollapsibleObject
2325
public NotHitConfig notHitConfig = new NotHitConfig();
2426

27+
@ConfigEntry.Gui.Excluded
28+
public NotPlaceConfig notPlaceConfig = new NotPlaceConfig();
29+
2530
@ConfigEntry.BoundedDiscrete(max = KEY_BINDING_SIZE)
2631
public ArrayList<String> key2Cmd = new ArrayList<>();
2732

@@ -43,4 +48,25 @@ public static class NotHitConfig {
4348
public boolean villager = true;
4449
}
4550

51+
/**
52+
* Use NotPlacingConfig#isPrevented to check. True to prevent.
53+
*/
54+
public static class NotPlaceConfig {
55+
public EnumMap<Direction, Boolean> map = new EnumMap<>(Direction.class);
56+
57+
public boolean isPrevented(Direction direction) {
58+
return map.getOrDefault(direction, false);
59+
}
60+
61+
public void setPrevented(Direction direction, boolean value) {
62+
map.put(direction, value);
63+
}
64+
65+
public boolean toggle(Direction direction) {
66+
boolean flag = !isPrevented(direction);
67+
setPrevented(direction, flag);
68+
return flag;
69+
}
70+
}
71+
4672
}

src/main/java/cn/taskeren/minequery/mixin/DeathScreenMixin.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import net.minecraft.client.MinecraftClient;
44
import net.minecraft.client.gui.screen.DeathScreen;
5-
import net.minecraft.client.gui.screen.TitleScreen;
65
import net.minecraft.client.network.ClientPlayerEntity;
76
import net.minecraft.text.TranslatableText;
87
import org.spongepowered.asm.mixin.Mixin;
@@ -24,7 +23,7 @@ private void init(CallbackInfo info) {
2423
if(config().autoRevive) {
2524
ClientPlayerEntity cp = MinecraftClient.getInstance().player;
2625
if(cp != null) {
27-
cp.requestRespawn();
26+
onConfirmQuit(false);
2827
cp.sendMessage(new TranslatableText("text.minequery.autorevive"), true);
2928
}
3029
}

src/main/resources/assets/minequery/lang/en_us.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919
"keybinding.minequery.key2cmd.8": "Key2Cmd #8",
2020
"keybinding.minequery.key2cmd.9": "Key2Cmd #9",
2121

22+
"text.minequery.notplace.toggle.allowed": "Allowed to place on %s",
23+
"text.minequery.notplace.toggle.prevented": "Prevented to place on %s",
24+
"text.minequery.notplace.tooltip.allowed": "%S: allowed",
25+
"text.minequery.notplace.tooltip.prevented": "%s: prevented",
26+
2227
"text.autoconfig.minequery.title": "MineQuery Configuration",
2328
"text.autoconfig.minequery.option.reseeding": "ReSeeding",
2429
"text.autoconfig.minequery.option.autoRevive": "Auto Revive",

src/main/resources/assets/minequery/lang/zh_cn.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919
"keybinding.minequery.key2cmd.8": "键对令 #8",
2020
"keybinding.minequery.key2cmd.9": "键对令 #9",
2121

22+
"text.minequery.notplace.toggle.allowed": "解禁%s面的放置",
23+
"text.minequery.notplace.toggle.prevented": "禁止%s面的放置",
24+
"text.minequery.notplace.tooltip.allowed": "%s面: 允许",
25+
"text.minequery.notplace.tooltip.prevented": "%s面: 禁止",
26+
2227
"text.autoconfig.minequery.title": "MC宝设置",
2328
"text.autoconfig.minequery.option.reseeding": "重新播种",
2429
"text.autoconfig.minequery.option.autoRevive": "自动复活",
@@ -34,4 +39,4 @@
3439
"text.autoconfig.minequery.option.notHitConfig.ironGolem": "不打铁傀儡",
3540
"text.autoconfig.minequery.option.notHitConfig.villager": "不打村民",
3641
"text.autoconfig.minequery.option.key2Cmd": "键对令指令设置"
37-
}
42+
}

0 commit comments

Comments
 (0)