实现基础的perk升降级功能
This commit is contained in:
parent
4b231c9ae4
commit
a8b16d3b5b
4 changed files with 66 additions and 13 deletions
|
@ -109,6 +109,7 @@ public class ModUtils {
|
||||||
addNetworkMessage(DroneFireMessage.class, DroneFireMessage::buffer, DroneFireMessage::new, DroneFireMessage::handler);
|
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(SimulationDistanceMessage.class, SimulationDistanceMessage::encode, SimulationDistanceMessage::decode, SimulationDistanceMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
||||||
addNetworkMessage(GunReforgeMessage.class, GunReforgeMessage::encode, GunReforgeMessage::decode, GunReforgeMessage::handler);
|
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)),
|
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())));
|
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())));
|
||||||
|
|
|
@ -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() {
|
public void generateResult() {
|
||||||
ItemStack gun = this.container.getItem(INPUT_SLOT);
|
ItemStack gun = this.container.getItem(INPUT_SLOT);
|
||||||
if (!(gun.getItem() instanceof GunItem gunItem)) {
|
if (!(gun.getItem() instanceof GunItem gunItem)) {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package net.mcreator.superbwarfare.client.screens;
|
||||||
import net.mcreator.superbwarfare.ModUtils;
|
import net.mcreator.superbwarfare.ModUtils;
|
||||||
import net.mcreator.superbwarfare.block.menu.ReforgingTableMenu;
|
import net.mcreator.superbwarfare.block.menu.ReforgingTableMenu;
|
||||||
import net.mcreator.superbwarfare.network.message.GunReforgeMessage;
|
import net.mcreator.superbwarfare.network.message.GunReforgeMessage;
|
||||||
|
import net.mcreator.superbwarfare.network.message.SetPerkLevelMessage;
|
||||||
import net.mcreator.superbwarfare.perk.Perk;
|
import net.mcreator.superbwarfare.perk.Perk;
|
||||||
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;
|
||||||
|
@ -67,7 +68,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
class ReforgeButton extends AbstractButton {
|
static class ReforgeButton extends AbstractButton {
|
||||||
|
|
||||||
public ReforgeButton(int pX, int pY) {
|
public ReforgeButton(int pX, int pY) {
|
||||||
super(pX, pY, 40, 16, Component.translatable("button.superbwarfare.reforge"));
|
super(pX, pY, 40, 16, Component.translatable("button.superbwarfare.reforge"));
|
||||||
|
@ -95,7 +96,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
class UpgradeButton extends AbstractButton {
|
static class UpgradeButton extends AbstractButton {
|
||||||
public Perk.Type type;
|
public Perk.Type type;
|
||||||
|
|
||||||
public UpgradeButton(int pX, int pY, Perk.Type type) {
|
public UpgradeButton(int pX, int pY, Perk.Type type) {
|
||||||
|
@ -105,11 +106,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPress() {
|
public void onPress() {
|
||||||
switch (type) {
|
ModUtils.PACKET_HANDLER.sendToServer(new SetPerkLevelMessage(type.ordinal(), true));
|
||||||
case AMMO -> {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -119,7 +116,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
class DowngradeButton extends AbstractButton {
|
static class DowngradeButton extends AbstractButton {
|
||||||
public Perk.Type type;
|
public Perk.Type type;
|
||||||
|
|
||||||
public DowngradeButton(int pX, int pY, Perk.Type type) {
|
public DowngradeButton(int pX, int pY, Perk.Type type) {
|
||||||
|
@ -129,11 +126,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPress() {
|
public void onPress() {
|
||||||
switch (type) {
|
ModUtils.PACKET_HANDLER.sendToServer(new SetPerkLevelMessage(type.ordinal(), false));
|
||||||
case AMMO -> {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue