魔改狗牌编辑相关
This commit is contained in:
parent
bfaad88cd0
commit
3866ee858d
9 changed files with 88 additions and 204 deletions
|
@ -2,55 +2,61 @@ package com.atsuishio.superbwarfare.client.screens;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.Mod;
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
import com.atsuishio.superbwarfare.item.DogTag;
|
import com.atsuishio.superbwarfare.item.DogTag;
|
||||||
import com.atsuishio.superbwarfare.menu.DogTagEditorMenu;
|
|
||||||
import com.atsuishio.superbwarfare.network.message.send.DogTagFinishEditMessage;
|
import com.atsuishio.superbwarfare.network.message.send.DogTagFinishEditMessage;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
|
import net.minecraft.client.GameNarrator;
|
||||||
import net.minecraft.client.gui.GuiGraphics;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.AbstractButton;
|
import net.minecraft.client.gui.components.AbstractButton;
|
||||||
import net.minecraft.client.gui.components.EditBox;
|
import net.minecraft.client.gui.components.EditBox;
|
||||||
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
|
|
||||||
import net.minecraft.core.component.DataComponents;
|
import net.minecraft.core.component.DataComponents;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.network.protocol.game.ServerboundRenameItemPacket;
|
import net.minecraft.network.protocol.game.ServerboundRenameItemPacket;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
import net.minecraft.util.StringUtil;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.neoforged.api.distmarker.Dist;
|
import net.neoforged.api.distmarker.Dist;
|
||||||
import net.neoforged.api.distmarker.OnlyIn;
|
import net.neoforged.api.distmarker.OnlyIn;
|
||||||
import net.neoforged.neoforge.network.PacketDistributor;
|
import net.neoforged.neoforge.network.PacketDistributor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
public class DogTagEditorScreen extends AbstractContainerScreen<DogTagEditorMenu> {
|
public class DogTagEditorScreen extends Screen {
|
||||||
|
|
||||||
private static final ResourceLocation TEXTURE = Mod.loc("textures/gui/dog_tag_editor.png");
|
private static final ResourceLocation TEXTURE = Mod.loc("textures/gui/dog_tag_editor.png");
|
||||||
|
|
||||||
public EditBox name;
|
public EditBox name;
|
||||||
private short currentColor = 0;
|
private short currentColor = 0;
|
||||||
private short[][] icon = new short[16][16];
|
private short[][] icon = new short[16][16];
|
||||||
|
|
||||||
public ItemStack stack;
|
public ItemStack stack;
|
||||||
|
|
||||||
private boolean init = false;
|
private boolean init = false;
|
||||||
|
|
||||||
public DogTagEditorScreen(DogTagEditorMenu pMenu, Inventory pPlayerInventory, Component pTitle) {
|
protected int imageWidth;
|
||||||
super(pMenu, pPlayerInventory, pTitle);
|
protected int imageHeight;
|
||||||
this.stack = pMenu.stack;
|
|
||||||
|
@Nullable
|
||||||
|
private String itemName;
|
||||||
|
|
||||||
|
public DogTagEditorScreen(ItemStack stack) {
|
||||||
|
super(GameNarrator.NO_TITLE);
|
||||||
|
this.stack = stack;
|
||||||
imageWidth = 207;
|
imageWidth = 207;
|
||||||
imageHeight = 185;
|
imageHeight = 185;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void renderBg(GuiGraphics pGuiGraphics, float pPartialTick, int pMouseX, int pMouseY) {
|
protected void renderBg(GuiGraphics pGuiGraphics, float pPartialTick, int pMouseX, int pMouseY) {
|
||||||
int i = (this.width - this.imageWidth) / 2;
|
int i = (this.width - this.imageWidth) / 2;
|
||||||
int j = (this.height - this.imageHeight) / 2;
|
int j = (this.height - this.imageHeight) / 2;
|
||||||
pGuiGraphics.blit(TEXTURE, i, j, 0, 0, this.imageWidth, this.imageHeight, 256, 256);
|
pGuiGraphics.blit(TEXTURE, i, j, 0, 0, this.imageWidth, this.imageHeight, 256, 256);
|
||||||
|
|
||||||
ItemStack stack = DogTagEditorScreen.this.menu.stack;
|
|
||||||
pGuiGraphics.renderItem(stack, i + 18, j + 36);
|
pGuiGraphics.renderItem(stack, i + 18, j + 36);
|
||||||
|
|
||||||
var pose = pGuiGraphics.pose();
|
var pose = pGuiGraphics.pose();
|
||||||
|
@ -76,7 +82,7 @@ public class DogTagEditorScreen extends AbstractContainerScreen<DogTagEditorMenu
|
||||||
this.renderBackground(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
this.renderBackground(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
||||||
super.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
super.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
||||||
this.name.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
this.name.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
||||||
this.renderTooltip(pGuiGraphics, pMouseX, pMouseY);
|
this.renderBg(pGuiGraphics, pPartialTick, pMouseX, pMouseY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -109,8 +115,8 @@ public class DogTagEditorScreen extends AbstractContainerScreen<DogTagEditorMenu
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void containerTick() {
|
public void tick() {
|
||||||
super.containerTick();
|
super.tick();
|
||||||
// this.name.tick();
|
// this.name.tick();
|
||||||
if (!this.init) {
|
if (!this.init) {
|
||||||
if (!this.stack.isEmpty()) {
|
if (!this.stack.isEmpty()) {
|
||||||
|
@ -154,35 +160,52 @@ public class DogTagEditorScreen extends AbstractContainerScreen<DogTagEditorMenu
|
||||||
this.name.setResponder(this::onNameChanged);
|
this.name.setResponder(this::onNameChanged);
|
||||||
// this.name.setValue(this.stack.getHoverName().getString());
|
// this.name.setValue(this.stack.getHoverName().getString());
|
||||||
this.addWidget(this.name);
|
this.addWidget(this.name);
|
||||||
this.setInitialFocus(this.name);
|
// this.setInitialFocus(this.name);
|
||||||
this.name.setEditable(true);
|
this.name.setEditable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onNameChanged(String name) {
|
private void onNameChanged(String name) {
|
||||||
String s = name;
|
String s = name;
|
||||||
ItemStack stack = DogTagEditorScreen.this.menu.stack;
|
|
||||||
if (!stack.has(DataComponents.CUSTOM_NAME)) {
|
if (!stack.has(DataComponents.CUSTOM_NAME)) {
|
||||||
s = "";
|
s = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.menu.setItemName(s)) {
|
if (this.setItemName(s)) {
|
||||||
if (this.minecraft != null && this.minecraft.player != null) {
|
if (this.minecraft != null && this.minecraft.player != null) {
|
||||||
this.minecraft.player.connection.send(new ServerboundRenameItemPacket(s));
|
this.minecraft.player.connection.send(new ServerboundRenameItemPacket(s));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 留空
|
|
||||||
@Override
|
|
||||||
protected void renderLabels(@NotNull GuiGraphics pGuiGraphics, int pMouseX, int pMouseY) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clearColors() {
|
public void clearColors() {
|
||||||
for (var el : this.icon) {
|
for (var el : this.icon) {
|
||||||
Arrays.fill(el, (short) -1);
|
Arrays.fill(el, (short) -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static String validateName(String pItemName) {
|
||||||
|
String s = StringUtil.filterText(pItemName);
|
||||||
|
return s.length() <= 30 ? s : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean setItemName(String name) {
|
||||||
|
String s = validateName(name);
|
||||||
|
if (s != null && !s.equals(this.itemName)) {
|
||||||
|
this.itemName = s;
|
||||||
|
if (!this.stack.isEmpty()) {
|
||||||
|
if (StringUtil.isBlank(s)) {
|
||||||
|
this.stack.remove(DataComponents.CUSTOM_NAME);
|
||||||
|
} else {
|
||||||
|
this.stack.set(DataComponents.CUSTOM_NAME, Component.literal(s));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
class ColorButton extends AbstractButton {
|
class ColorButton extends AbstractButton {
|
||||||
|
|
||||||
|
@ -229,6 +252,10 @@ public class DogTagEditorScreen extends AbstractContainerScreen<DogTagEditorMenu
|
||||||
@Override
|
@Override
|
||||||
public void onPress() {
|
public void onPress() {
|
||||||
if (!DogTagEditorScreen.this.init) return;
|
if (!DogTagEditorScreen.this.init) return;
|
||||||
|
if (DogTagEditorScreen.this.minecraft != null) {
|
||||||
|
DogTagEditorScreen.this.minecraft.setScreen(null);
|
||||||
|
}
|
||||||
|
|
||||||
var colors = new ArrayList<Short>(DogTagEditorScreen.this.icon.length * DogTagEditorScreen.this.icon[0].length);
|
var colors = new ArrayList<Short>(DogTagEditorScreen.this.icon.length * DogTagEditorScreen.this.icon[0].length);
|
||||||
|
|
||||||
for (var row : DogTagEditorScreen.this.icon) {
|
for (var row : DogTagEditorScreen.this.icon) {
|
||||||
|
|
|
@ -28,8 +28,4 @@ public class ModMenuTypes {
|
||||||
public static final Supplier<MenuType<FuMO25Menu>> FUMO_25_MENU =
|
public static final Supplier<MenuType<FuMO25Menu>> FUMO_25_MENU =
|
||||||
REGISTRY.register("fumo_25_menu",
|
REGISTRY.register("fumo_25_menu",
|
||||||
() -> IMenuTypeExtension.create((windowId, inv, data) -> new FuMO25Menu(windowId, inv)));
|
() -> IMenuTypeExtension.create((windowId, inv, data) -> new FuMO25Menu(windowId, inv)));
|
||||||
|
|
||||||
public static final Supplier<MenuType<DogTagEditorMenu>> DOG_TAG_EDITOR_MENU =
|
|
||||||
REGISTRY.register("dog_tag_editor_menu",
|
|
||||||
() -> IMenuTypeExtension.create((windowId, inv, data) -> new DogTagEditorMenu(windowId)));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,5 @@ public class ModScreens {
|
||||||
event.register(ModMenuTypes.VEHICLE_MENU.get(), VehicleScreen::new);
|
event.register(ModMenuTypes.VEHICLE_MENU.get(), VehicleScreen::new);
|
||||||
event.register(ModMenuTypes.SUPERB_ITEM_INTERFACE_MENU.get(), SuperbItemInterfaceScreen::new);
|
event.register(ModMenuTypes.SUPERB_ITEM_INTERFACE_MENU.get(), SuperbItemInterfaceScreen::new);
|
||||||
event.register(ModMenuTypes.FUMO_25_MENU.get(), FuMO25Screen::new);
|
event.register(ModMenuTypes.FUMO_25_MENU.get(), FuMO25Screen::new);
|
||||||
event.register(ModMenuTypes.DOG_TAG_EDITOR_MENU.get(), DogTagEditorScreen::new);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,16 @@
|
||||||
package com.atsuishio.superbwarfare.item;
|
package com.atsuishio.superbwarfare.item;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.client.screens.DogTagEditorScreen;
|
||||||
import com.atsuishio.superbwarfare.client.tooltip.component.DogTagImageComponent;
|
import com.atsuishio.superbwarfare.client.tooltip.component.DogTagImageComponent;
|
||||||
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
||||||
import com.atsuishio.superbwarfare.menu.DogTagEditorMenu;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.world.InteractionHand;
|
|
||||||
import net.minecraft.world.InteractionResultHolder;
|
|
||||||
import net.minecraft.world.SimpleMenuProvider;
|
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.inventory.ContainerLevelAccess;
|
|
||||||
import net.minecraft.world.inventory.tooltip.TooltipComponent;
|
import net.minecraft.world.inventory.tooltip.TooltipComponent;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import top.theillusivec4.curios.api.CuriosApi;
|
import top.theillusivec4.curios.api.CuriosApi;
|
||||||
import top.theillusivec4.curios.api.SlotContext;
|
import top.theillusivec4.curios.api.SlotContext;
|
||||||
import top.theillusivec4.curios.api.type.capability.ICurioItem;
|
import top.theillusivec4.curios.api.type.capability.ICurioItem;
|
||||||
|
@ -23,7 +19,7 @@ import java.util.Arrays;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class DogTag extends Item implements ICurioItem {
|
public class DogTag extends Item implements ICurioItem, ItemScreenProvider {
|
||||||
|
|
||||||
public DogTag() {
|
public DogTag() {
|
||||||
super(new Properties().stacksTo(1));
|
super(new Properties().stacksTo(1));
|
||||||
|
@ -38,17 +34,18 @@ public class DogTag extends Item implements ICurioItem {
|
||||||
return flag.get();
|
return flag.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
// @Override
|
||||||
public @NotNull InteractionResultHolder<ItemStack> use(Level level, Player player, @NotNull InteractionHand usedHand) {
|
// @ParametersAreNonnullByDefault
|
||||||
ItemStack stack = player.getItemInHand(usedHand);
|
// public @NotNull InteractionResultHolder<ItemStack> use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) {
|
||||||
if (level.isClientSide) {
|
// ItemStack stack = pPlayer.getItemInHand(pUsedHand);
|
||||||
return InteractionResultHolder.success(stack);
|
// if (pLevel.isClientSide) {
|
||||||
} else {
|
// return InteractionResultHolder.success(stack);
|
||||||
player.openMenu(new SimpleMenuProvider((i, inventory, p) ->
|
// } else {
|
||||||
new DogTagEditorMenu(i, ContainerLevelAccess.create(level, p.getOnPos()), stack), Component.empty()));
|
// pPlayer.openMenu(new SimpleMenuProvider((i, inventory, player) ->
|
||||||
return InteractionResultHolder.consume(stack);
|
// new DogTagEditorMenu(i, ContainerLevelAccess.create(pLevel, pPlayer.getOnPos()), stack), Component.empty()));
|
||||||
}
|
// return InteractionResultHolder.consume(stack);
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
|
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
|
||||||
|
@ -74,4 +71,9 @@ public class DogTag extends Item implements ICurioItem {
|
||||||
|
|
||||||
return colors;
|
return colors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Screen getItemScreen(ItemStack stack, Player player) {
|
||||||
|
return new DogTagEditorScreen(stack);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,106 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.menu;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModMenuTypes;
|
|
||||||
import com.atsuishio.superbwarfare.network.message.receive.DogTagEditorMessage;
|
|
||||||
import net.minecraft.core.component.DataComponents;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
|
||||||
import net.minecraft.util.StringUtil;
|
|
||||||
import net.minecraft.world.Container;
|
|
||||||
import net.minecraft.world.SimpleContainer;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
|
||||||
import net.minecraft.world.inventory.ContainerLevelAccess;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.neoforged.bus.api.SubscribeEvent;
|
|
||||||
import net.neoforged.fml.common.EventBusSubscriber;
|
|
||||||
import net.neoforged.neoforge.event.entity.player.PlayerContainerEvent;
|
|
||||||
import net.neoforged.neoforge.network.PacketDistributor;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@EventBusSubscriber(bus = EventBusSubscriber.Bus.GAME)
|
|
||||||
public class DogTagEditorMenu extends AbstractContainerMenu {
|
|
||||||
|
|
||||||
protected final Container container;
|
|
||||||
protected final ContainerLevelAccess access;
|
|
||||||
@Nullable
|
|
||||||
private String itemName;
|
|
||||||
|
|
||||||
public ItemStack stack;
|
|
||||||
|
|
||||||
public DogTagEditorMenu(int pContainerId) {
|
|
||||||
this(pContainerId, new SimpleContainer(0), ContainerLevelAccess.NULL, ItemStack.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DogTagEditorMenu(int pContainerId, ContainerLevelAccess access, ItemStack stack) {
|
|
||||||
this(pContainerId, new SimpleContainer(0), access, stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
public DogTagEditorMenu(int pContainerId, Container container, ContainerLevelAccess pContainerLevelAccess, ItemStack stack) {
|
|
||||||
super(ModMenuTypes.DOG_TAG_EDITOR_MENU.get(), pContainerId);
|
|
||||||
|
|
||||||
checkContainerSize(container, 0);
|
|
||||||
|
|
||||||
this.container = container;
|
|
||||||
this.access = pContainerLevelAccess;
|
|
||||||
this.stack = stack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ItemStack quickMoveStack(@NotNull Player player, int index) {
|
|
||||||
return ItemStack.EMPTY;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean stillValid(Player pPlayer) {
|
|
||||||
return pPlayer.isAlive();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setItemName(String name) {
|
|
||||||
String s = validateName(name);
|
|
||||||
if (s != null && !s.equals(this.itemName)) {
|
|
||||||
this.itemName = s;
|
|
||||||
if (!this.stack.isEmpty()) {
|
|
||||||
if (StringUtil.isBlank(s)) {
|
|
||||||
this.stack.remove(DataComponents.CUSTOM_NAME);
|
|
||||||
} else {
|
|
||||||
this.stack.set(DataComponents.CUSTOM_NAME, Component.literal(s));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private static String validateName(String pItemName) {
|
|
||||||
String s = StringUtil.filterText(pItemName);
|
|
||||||
return s.length() <= 30 ? s : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onContainerOpened(PlayerContainerEvent.Open event) {
|
|
||||||
if (event.getContainer() instanceof DogTagEditorMenu menu && event.getEntity() instanceof ServerPlayer serverPlayer) {
|
|
||||||
var stack = serverPlayer.getItemInHand(serverPlayer.getUsedItemHand());
|
|
||||||
if (stack.is(ModItems.DOG_TAG.get())) {
|
|
||||||
PacketDistributor.sendToPlayer(serverPlayer, new DogTagEditorMessage(menu.containerId, stack));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void finishEdit(List<Short> colors, String name) {
|
|
||||||
if (this.stack.isEmpty()) return;
|
|
||||||
|
|
||||||
stack.set(ModDataComponents.DOG_TAG_IMAGE, colors);
|
|
||||||
|
|
||||||
if (!name.isEmpty()) {
|
|
||||||
this.stack.set(DataComponents.CUSTOM_NAME, Component.literal(name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +1,9 @@
|
||||||
package com.atsuishio.superbwarfare.network;
|
package com.atsuishio.superbwarfare.network;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.screens.DogTagEditorScreen;
|
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.menu.DogTagEditorMenu;
|
|
||||||
import net.minecraft.client.CameraType;
|
import net.minecraft.client.CameraType;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@ -19,14 +16,4 @@ public class ClientPacketHandler {
|
||||||
|
|
||||||
Minecraft.getInstance().options.setCameraType(Objects.requireNonNullElse(ClientEventHandler.lastCameraType, CameraType.FIRST_PERSON));
|
Minecraft.getInstance().options.setCameraType(Objects.requireNonNullElse(ClientEventHandler.lastCameraType, CameraType.FIRST_PERSON));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void handleDogTagEditorMessage(int containerId, ItemStack stack) {
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
|
||||||
if (mc.player != null && mc.player.containerMenu.containerId == containerId) {
|
|
||||||
((DogTagEditorMenu) mc.player.containerMenu).stack = stack;
|
|
||||||
if (mc.screen instanceof DogTagEditorScreen dogTagEditorScreen) {
|
|
||||||
dogTagEditorScreen.stack = stack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,11 +10,8 @@ import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||||
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
|
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
|
||||||
|
|
||||||
public class NetworkRegistry {
|
public class NetworkRegistry {
|
||||||
private static PayloadRegistrar registrar;
|
|
||||||
|
|
||||||
public static void register(final RegisterPayloadHandlersEvent event) {
|
|
||||||
registrar = event.registrar("1");
|
|
||||||
|
|
||||||
|
private static void register() {
|
||||||
playToClient(PlayerVariablesSyncMessage.TYPE, PlayerVariablesSyncMessage.STREAM_CODEC, (msg, ctx) -> PlayerVariablesSyncMessage.handler(msg));
|
playToClient(PlayerVariablesSyncMessage.TYPE, PlayerVariablesSyncMessage.STREAM_CODEC, (msg, ctx) -> PlayerVariablesSyncMessage.handler(msg));
|
||||||
playToClient(ShakeClientMessage.TYPE, ShakeClientMessage.STREAM_CODEC, ShakeClientMessage::handler);
|
playToClient(ShakeClientMessage.TYPE, ShakeClientMessage.STREAM_CODEC, ShakeClientMessage::handler);
|
||||||
playToClient(ClientMotionSyncMessage.TYPE, ClientMotionSyncMessage.STREAM_CODEC, ClientMotionSyncMessage::handler);
|
playToClient(ClientMotionSyncMessage.TYPE, ClientMotionSyncMessage.STREAM_CODEC, ClientMotionSyncMessage::handler);
|
||||||
|
@ -28,7 +25,6 @@ public class NetworkRegistry {
|
||||||
playToClient(RadarMenuOpenMessage.TYPE, RadarMenuOpenMessage.STREAM_CODEC, RadarMenuOpenMessage::handler);
|
playToClient(RadarMenuOpenMessage.TYPE, RadarMenuOpenMessage.STREAM_CODEC, RadarMenuOpenMessage::handler);
|
||||||
playToClient(RadarMenuCloseMessage.TYPE, RadarMenuCloseMessage.STREAM_CODEC, (message1, context1) -> RadarMenuCloseMessage.handler());
|
playToClient(RadarMenuCloseMessage.TYPE, RadarMenuCloseMessage.STREAM_CODEC, (message1, context1) -> RadarMenuCloseMessage.handler());
|
||||||
playToClient(ClientTacticalSprintSyncMessage.TYPE, ClientTacticalSprintSyncMessage.STREAM_CODEC, (msg, ctx) -> ClientTacticalSprintSyncMessage.handler(msg));
|
playToClient(ClientTacticalSprintSyncMessage.TYPE, ClientTacticalSprintSyncMessage.STREAM_CODEC, (msg, ctx) -> ClientTacticalSprintSyncMessage.handler(msg));
|
||||||
playToClient(DogTagEditorMessage.TYPE, DogTagEditorMessage.STREAM_CODEC, (msg, ctx) -> DogTagEditorMessage.handler(msg));
|
|
||||||
playToClient(VehiclesDataMessage.TYPE, VehiclesDataMessage.STREAM_CODEC, (msg, ctx) -> VehiclesDataMessage.handler(msg));
|
playToClient(VehiclesDataMessage.TYPE, VehiclesDataMessage.STREAM_CODEC, (msg, ctx) -> VehiclesDataMessage.handler(msg));
|
||||||
|
|
||||||
playToServer(LaserShootMessage.TYPE, LaserShootMessage.STREAM_CODEC, LaserShootMessage::handler);
|
playToServer(LaserShootMessage.TYPE, LaserShootMessage.STREAM_CODEC, LaserShootMessage::handler);
|
||||||
|
@ -67,6 +63,13 @@ public class NetworkRegistry {
|
||||||
playToServer(MouseMoveMessage.TYPE, MouseMoveMessage.STREAM_CODEC, MouseMoveMessage::handler);
|
playToServer(MouseMoveMessage.TYPE, MouseMoveMessage.STREAM_CODEC, MouseMoveMessage::handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static PayloadRegistrar registrar;
|
||||||
|
|
||||||
|
public static void register(final RegisterPayloadHandlersEvent event) {
|
||||||
|
registrar = event.registrar("1");
|
||||||
|
register();
|
||||||
|
}
|
||||||
|
|
||||||
public static <T extends CustomPacketPayload> void playToClient(CustomPacketPayload.Type<T> type, StreamCodec<? super RegistryFriendlyByteBuf, T> reader, IPayloadHandler<T> handler) {
|
public static <T extends CustomPacketPayload> void playToClient(CustomPacketPayload.Type<T> type, StreamCodec<? super RegistryFriendlyByteBuf, T> reader, IPayloadHandler<T> handler) {
|
||||||
registrar.playToClient(type, reader, handler);
|
registrar.playToClient(type, reader, handler);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.network.message.receive;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.Mod;
|
|
||||||
import com.atsuishio.superbwarfare.network.ClientPacketHandler;
|
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
|
||||||
import net.minecraft.network.codec.ByteBufCodecs;
|
|
||||||
import net.minecraft.network.codec.StreamCodec;
|
|
||||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public record DogTagEditorMessage(int containerId, ItemStack stack) implements CustomPacketPayload {
|
|
||||||
|
|
||||||
public static final Type<DogTagEditorMessage> TYPE = new Type<>(Mod.loc("dog_tag_editor"));
|
|
||||||
|
|
||||||
public static final StreamCodec<RegistryFriendlyByteBuf, DogTagEditorMessage> STREAM_CODEC = StreamCodec.composite(
|
|
||||||
ByteBufCodecs.INT, DogTagEditorMessage::containerId,
|
|
||||||
ItemStack.STREAM_CODEC, DogTagEditorMessage::stack,
|
|
||||||
DogTagEditorMessage::new
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
public static void handler(DogTagEditorMessage message) {
|
|
||||||
ClientPacketHandler.handleDogTagEditorMessage(message.containerId, message.stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull Type<? extends CustomPacketPayload> type() {
|
|
||||||
return TYPE;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +1,16 @@
|
||||||
package com.atsuishio.superbwarfare.network.message.send;
|
package com.atsuishio.superbwarfare.network.message.send;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.Mod;
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
import com.atsuishio.superbwarfare.menu.DogTagEditorMenu;
|
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
||||||
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import net.minecraft.core.component.DataComponents;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.network.codec.ByteBufCodecs;
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
import net.minecraft.network.codec.StreamCodec;
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
@ -25,11 +29,14 @@ public record DogTagFinishEditMessage(List<Short> colors, String name) implement
|
||||||
public static void handler(DogTagFinishEditMessage message, final IPayloadContext context) {
|
public static void handler(DogTagFinishEditMessage message, final IPayloadContext context) {
|
||||||
ServerPlayer serverPlayer = (ServerPlayer) context.player();
|
ServerPlayer serverPlayer = (ServerPlayer) context.player();
|
||||||
|
|
||||||
if (serverPlayer.containerMenu instanceof DogTagEditorMenu menu) {
|
ItemStack stack = serverPlayer.getMainHandItem();
|
||||||
menu.finishEdit(message.colors, message.name);
|
if (!stack.is(ModItems.DOG_TAG.get())) return;
|
||||||
}
|
|
||||||
|
|
||||||
serverPlayer.closeContainer();
|
stack.set(ModDataComponents.DOG_TAG_IMAGE, message.colors);
|
||||||
|
|
||||||
|
if (!message.name.isEmpty()) {
|
||||||
|
stack.set(DataComponents.CUSTOM_NAME, Component.literal(message.name));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Add table
Reference in a new issue