Skip to content

Commit 360ec4e

Browse files
committed
更新:1.4.0
添加命令:添加了"/cc2001_floo_powder"及其子命令。 添加方法:飞路粉现在可以拿在主手进行使用了(生存需通过指令将"handUseFP"设为true才可使用)。 修复bug:现在能在TeaCon的测试服进行跨维度传送了(感谢3T)。
1 parent 9c9e95b commit 360ec4e

6 files changed

Lines changed: 145 additions & 8 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ plugins {
1616
apply plugin: 'net.minecraftforge.gradle'
1717

1818

19-
version = '1.3.4'
19+
version = '1.4.0'
2020
group = 'io.github.c20c01.cc2001_floo_powder' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
2121
archivesBaseName = 'FlooPowder'
2222

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package io.github.c20c01.command;
2+
3+
import com.mojang.brigadier.CommandDispatcher;
4+
import com.mojang.brigadier.context.CommandContext;
5+
import io.github.c20c01.CCMain;
6+
import net.minecraft.commands.CommandSourceStack;
7+
import net.minecraft.commands.Commands;
8+
import net.minecraft.network.chat.ChatType;
9+
import net.minecraft.network.chat.TextComponent;
10+
import net.minecraft.server.level.ServerPlayer;
11+
import net.minecraft.world.entity.Entity;
12+
import net.minecraftforge.event.RegisterCommandsEvent;
13+
import net.minecraftforge.eventbus.api.SubscribeEvent;
14+
import net.minecraftforge.fml.common.Mod;
15+
16+
@Mod.EventBusSubscriber
17+
public class CommandEventHandler extends ModSettings {
18+
19+
@SubscribeEvent
20+
public static void registerCommands(RegisterCommandsEvent event) {
21+
CommandDispatcher<CommandSourceStack> dispatcher = event.getDispatcher();
22+
dispatcher.register(
23+
Commands.literal(CCMain.ID)
24+
.requires((sourceStack) -> sourceStack.hasPermission(2))
25+
.executes(context -> print(context, "❤ Floo Powder ❤"))
26+
.then(Commands.literal(HAND_USE_FP).executes(context -> print(context, HAND_USE_FP + ": " + MAP.get(HAND_USE_FP)))
27+
.then(Commands.literal(TRUE).executes(context -> {
28+
put(HAND_USE_FP, true);
29+
return print(context, HAND_USE_FP + " ← " + TRUE);
30+
}))
31+
.then(Commands.literal(FALSE).executes(context -> {
32+
put(HAND_USE_FP, false);
33+
return print(context, HAND_USE_FP + " ← " + FALSE);
34+
}))
35+
)
36+
);
37+
}
38+
39+
private static int print(CommandContext<CommandSourceStack> commandContext, String s) {
40+
Entity entity = commandContext.getSource().getEntity();
41+
if (entity instanceof ServerPlayer serverPlayer) {
42+
var text = new TextComponent(s);
43+
serverPlayer.sendMessage(text, ChatType.CHAT, entity.getUUID());
44+
}
45+
return 0;
46+
}
47+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.github.c20c01.command;
2+
3+
import io.github.c20c01.saveData.SettingSavedData;
4+
import net.minecraft.server.level.ServerLevel;
5+
6+
import java.util.HashMap;
7+
8+
public class ModSettings {
9+
public static final HashMap<String, Boolean> MAP = new HashMap<>();
10+
private static SettingSavedData savedData;
11+
public static final String HAND_USE_FP = "handUseFP";
12+
public static final String TRUE = "true";
13+
public static final String FALSE = "false";
14+
15+
public static void load(ServerLevel level) {
16+
savedData = SettingSavedData.get(level.getServer());
17+
buildSettingsMap();
18+
}
19+
20+
private static void buildSettingsMap() {
21+
MAP.putIfAbsent(HAND_USE_FP, false); //Outside creative mode, can player use the FP without a fire block?
22+
}
23+
24+
public static void put(String key, boolean value) {
25+
if (MAP.containsKey(key)) {
26+
MAP.put(key, value);
27+
}
28+
savedData.changed();
29+
}
30+
31+
public static boolean get(String key) {
32+
return MAP.get(key);
33+
}
34+
35+
public static void clear() {
36+
MAP.clear();
37+
}
38+
}

src/main/java/io/github/c20c01/item/FlooPowder.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
import io.github.c20c01.CCMain;
44
import io.github.c20c01.block.PortalFireBlock;
55
import io.github.c20c01.block.PortalFireBlockEntity;
6+
import io.github.c20c01.command.ModSettings;
67
import io.github.c20c01.tp.TpTool;
7-
import net.minecraft.Util;
88
import net.minecraft.core.BlockPos;
99
import net.minecraft.core.Direction;
10-
import net.minecraft.network.chat.ChatType;
11-
import net.minecraft.network.chat.TextComponent;
1210
import net.minecraft.server.level.ServerLevel;
1311
import net.minecraft.server.level.ServerPlayer;
1412
import net.minecraft.sounds.SoundEvents;
@@ -136,9 +134,9 @@ private boolean isFireBlock(BlockPos pos) {
136134
@Override
137135
public @NotNull InteractionResultHolder<ItemStack> use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand hand) {
138136
if (player instanceof ServerPlayer serverPlayer) {
139-
var text1 = new TextComponent("try");
140-
serverPlayer.sendMessage(text1, ChatType.CHAT, Util.NIL_UUID);
141-
TpTool.gogo(serverPlayer,player.getItemInHand(hand).getDisplayName().getString(),level,player.getOnPos());
137+
if (serverPlayer.gameMode.isCreative() || ModSettings.get(ModSettings.HAND_USE_FP)) {
138+
TpTool.gogo(serverPlayer, player.getItemInHand(hand).getDisplayName().getString(), level, player.getOnPos());
139+
}
142140
}
143141
return InteractionResultHolder.pass(player.getItemInHand(hand));
144142
}

src/main/java/io/github/c20c01/saveData/LoadSaveData.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.c20c01.saveData;
22

33
import io.github.c20c01.CCMain;
4+
import io.github.c20c01.command.ModSettings;
45
import io.github.c20c01.gui.GuiData;
56
import io.github.c20c01.pos.PosMap;
67
import net.minecraft.server.level.ServerLevel;
@@ -22,13 +23,15 @@ public static void serverStarted(ServerStartedEvent event) {
2223
//Loading points
2324
GuiData.load(level);
2425
//Loading desc
26+
ModSettings.load(level);
27+
//Loading settings
2528
}).start();
2629
}
2730

2831
@SubscribeEvent
2932
public static void serverStopped(ServerStoppedEvent event) {
3033
PosMap.clear();
31-
//Clearing points
3234
GuiData.clear();
35+
ModSettings.clear();
3336
}
3437
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.github.c20c01.saveData;
2+
3+
import io.github.c20c01.CCMain;
4+
import io.github.c20c01.command.ModSettings;
5+
import net.minecraft.nbt.CompoundTag;
6+
import net.minecraft.server.MinecraftServer;
7+
import net.minecraft.server.level.ServerLevel;
8+
import net.minecraft.world.level.Level;
9+
import net.minecraft.world.level.saveddata.SavedData;
10+
import org.jetbrains.annotations.NotNull;
11+
12+
public class SettingSavedData extends SavedData {
13+
private static final String DATA_NAME = CCMain.ID + "_settings";
14+
15+
public SettingSavedData(CompoundTag nbt) {
16+
this.read(nbt);
17+
}
18+
19+
public SettingSavedData() {
20+
super();
21+
}
22+
23+
@Override
24+
public @NotNull CompoundTag save(@NotNull CompoundTag compound) {
25+
compound = new CompoundTag();
26+
var map = ModSettings.MAP;
27+
for (String key : map.keySet()) {
28+
compound.putBoolean(key, map.get(key));
29+
}
30+
return compound;
31+
}
32+
33+
public void read(CompoundTag compound) {
34+
for (String key : compound.getAllKeys()) {
35+
ModSettings.MAP.put(key, compound.getBoolean(key));
36+
}
37+
}
38+
39+
public static SettingSavedData get(MinecraftServer server) {
40+
if (server != null) {
41+
ServerLevel overWorld = server.getLevel(Level.OVERWORLD);
42+
if (overWorld != null)
43+
return overWorld.getDataStorage().computeIfAbsent(SettingSavedData::new, SettingSavedData::new, DATA_NAME);
44+
}
45+
return null;
46+
}
47+
48+
public void changed() {
49+
this.setDirty();
50+
}
51+
}

0 commit comments

Comments
 (0)