实现基础的perk升降级功能

This commit is contained in:
17146 2024-08-13 02:34:43 +08:00
parent 4b231c9ae4
commit a8b16d3b5b
4 changed files with 66 additions and 13 deletions

View file

@ -109,6 +109,7 @@ public class ModUtils {
addNetworkMessage(DroneFireMessage.class, DroneFireMessage::buffer, DroneFireMessage::new, DroneFireMessage::handler);
addNetworkMessage(SimulationDistanceMessage.class, SimulationDistanceMessage::encode, SimulationDistanceMessage::decode, SimulationDistanceMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
addNetworkMessage(GunReforgeMessage.class, GunReforgeMessage::encode, GunReforgeMessage::decode, GunReforgeMessage::handler);
addNetworkMessage(SetPerkLevelMessage.class, SetPerkLevelMessage::encode, SetPerkLevelMessage::decode, SetPerkLevelMessage::handler);
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())));

View file

@ -148,6 +148,17 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
});
}
public void setPerkLevel(Perk.Type type, boolean add) {
switch (type) {
case AMMO ->
this.ammoPerkLevel.set(add ? Math.min(10, this.ammoPerkLevel.get() + 1) : Math.max(1, this.ammoPerkLevel.get() - 1));
case FUNCTIONAL ->
this.funcPerkLevel.set(add ? Math.min(10, this.funcPerkLevel.get() + 1) : Math.max(1, this.funcPerkLevel.get() - 1));
case DAMAGE ->
this.damagePerkLevel.set(add ? Math.min(10, this.damagePerkLevel.get() + 1) : Math.max(1, this.damagePerkLevel.get() - 1));
}
}
public void generateResult() {
ItemStack gun = this.container.getItem(INPUT_SLOT);
if (!(gun.getItem() instanceof GunItem gunItem)) {

View file

@ -3,6 +3,7 @@ package net.mcreator.superbwarfare.client.screens;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.block.menu.ReforgingTableMenu;
import net.mcreator.superbwarfare.network.message.GunReforgeMessage;
import net.mcreator.superbwarfare.network.message.SetPerkLevelMessage;
import net.mcreator.superbwarfare.perk.Perk;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractButton;
@ -67,7 +68,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
}
@OnlyIn(Dist.CLIENT)
class ReforgeButton extends AbstractButton {
static class ReforgeButton extends AbstractButton {
public ReforgeButton(int pX, int pY) {
super(pX, pY, 40, 16, Component.translatable("button.superbwarfare.reforge"));
@ -95,7 +96,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
}
@OnlyIn(Dist.CLIENT)
class UpgradeButton extends AbstractButton {
static class UpgradeButton extends AbstractButton {
public Perk.Type type;
public UpgradeButton(int pX, int pY, Perk.Type type) {
@ -105,11 +106,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
@Override
public void onPress() {
switch (type) {
case AMMO -> {
}
}
ModUtils.PACKET_HANDLER.sendToServer(new SetPerkLevelMessage(type.ordinal(), true));
}
@Override
@ -119,7 +116,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
}
@OnlyIn(Dist.CLIENT)
class DowngradeButton extends AbstractButton {
static class DowngradeButton extends AbstractButton {
public Perk.Type type;
public DowngradeButton(int pX, int pY, Perk.Type type) {
@ -129,11 +126,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
@Override
public void onPress() {
switch (type) {
case AMMO -> {
}
}
ModUtils.PACKET_HANDLER.sendToServer(new SetPerkLevelMessage(type.ordinal(), false));
}
@Override

View file

@ -0,0 +1,48 @@
package net.mcreator.superbwarfare.network.message;
import net.mcreator.superbwarfare.block.menu.ReforgingTableMenu;
import net.mcreator.superbwarfare.perk.Perk;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class SetPerkLevelMessage {
int type;
boolean add;
public SetPerkLevelMessage(int type, boolean add) {
this.type = type;
this.add = add;
}
public static void encode(SetPerkLevelMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.type);
buffer.writeBoolean(message.add);
}
public static SetPerkLevelMessage decode(FriendlyByteBuf buffer) {
return new SetPerkLevelMessage(buffer.readInt(), buffer.readBoolean());
}
public static void handler(SetPerkLevelMessage message, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> {
ServerPlayer player = ctx.get().getSender();
if (player == null) {
return;
}
AbstractContainerMenu abstractcontainermenu = player.containerMenu;
if (abstractcontainermenu instanceof ReforgingTableMenu menu) {
if (!menu.stillValid(player)) {
return;
}
menu.setPerkLevel(Perk.Type.values()[message.type], message.add);
}
});
ctx.get().setPacketHandled(true);
}
}