实现基础的perk添加功能

This commit is contained in:
17146 2024-08-13 02:22:10 +08:00
parent 7326891386
commit 4b231c9ae4
4 changed files with 96 additions and 4 deletions

View file

@ -108,6 +108,7 @@ public class ModUtils {
addNetworkMessage(DroneMovementMessage.class, DroneMovementMessage::encode, DroneMovementMessage::decode, DroneMovementMessage::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(GunReforgeMessage.class, GunReforgeMessage::encode, GunReforgeMessage::decode, GunReforgeMessage::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

@ -4,7 +4,9 @@ import net.mcreator.superbwarfare.init.ModBlocks;
import net.mcreator.superbwarfare.init.ModMenuTypes;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.PerkItem;
import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper;
import net.minecraft.world.Container;
import net.minecraft.world.SimpleContainer;
import net.minecraft.world.entity.player.Inventory;
@ -45,6 +47,10 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
this.container = container;
this.access = pContainerLevelAccess;
this.ammoPerkLevel.set(1);
this.funcPerkLevel.set(1);
this.damagePerkLevel.set(1);
this.addDataSlot(ammoPerkLevel);
this.addDataSlot(funcPerkLevel);
this.addDataSlot(damagePerkLevel);
@ -142,6 +148,47 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
});
}
public void generateResult() {
ItemStack gun = this.container.getItem(INPUT_SLOT);
if (!(gun.getItem() instanceof GunItem gunItem)) {
return;
}
ItemStack ammo = this.container.getItem(AMMO_PERK_SLOT);
ItemStack func = this.container.getItem(FUNC_PERK_SLOT);
ItemStack damage = this.container.getItem(DAMAGE_PERK_SLOT);
if (ammo.isEmpty() && func.isEmpty() && damage.isEmpty()) {
return;
}
ItemStack result = gun.copy();
if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem perkItem) {
if (gunItem.canApplyPerk(result, perkItem.getPerk(), Perk.Type.AMMO)) {
PerkHelper.setPerk(result, perkItem.getPerk(), this.ammoPerkLevel.get());
this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY);
}
}
if (!func.isEmpty() && func.getItem() instanceof PerkItem perkItem) {
if (gunItem.canApplyPerk(result, perkItem.getPerk(), Perk.Type.FUNCTIONAL)) {
PerkHelper.setPerk(result, perkItem.getPerk(), this.funcPerkLevel.get());
this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY);
}
}
if (!damage.isEmpty() && damage.getItem() instanceof PerkItem perkItem) {
if (gunItem.canApplyPerk(result, perkItem.getPerk(), Perk.Type.DAMAGE)) {
PerkHelper.setPerk(result, perkItem.getPerk(), this.damagePerkLevel.get());
this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY);
}
}
this.container.setItem(INPUT_SLOT, ItemStack.EMPTY);
this.container.setItem(RESULT_SLOT, result);
this.container.setChanged();
}
static class InputSlot extends Slot {
public InputSlot(Container pContainer, int pSlot, int pX, int pY) {
super(pContainer, pSlot, pX, pY);

View file

@ -2,6 +2,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.perk.Perk;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractButton;
@ -66,7 +67,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
}
@OnlyIn(Dist.CLIENT)
static class ReforgeButton extends AbstractButton {
class ReforgeButton extends AbstractButton {
public ReforgeButton(int pX, int pY) {
super(pX, pY, 40, 16, Component.translatable("button.superbwarfare.reforge"));
@ -84,7 +85,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
@Override
public void onPress() {
ModUtils.PACKET_HANDLER.sendToServer(new GunReforgeMessage(0));
}
@Override
@ -94,7 +95,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
}
@OnlyIn(Dist.CLIENT)
static class UpgradeButton extends AbstractButton {
class UpgradeButton extends AbstractButton {
public Perk.Type type;
public UpgradeButton(int pX, int pY, Perk.Type type) {
@ -118,7 +119,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
}
@OnlyIn(Dist.CLIENT)
static class DowngradeButton extends AbstractButton {
class DowngradeButton extends AbstractButton {
public Perk.Type type;
public DowngradeButton(int pX, int pY, Perk.Type type) {

View file

@ -0,0 +1,43 @@
package net.mcreator.superbwarfare.network.message;
import net.mcreator.superbwarfare.block.menu.ReforgingTableMenu;
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 GunReforgeMessage {
int type;
public GunReforgeMessage(int type) {
this.type = type;
}
public static void encode(GunReforgeMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.type);
}
public static GunReforgeMessage decode(FriendlyByteBuf buffer) {
return new GunReforgeMessage(buffer.readInt());
}
public static void handler(GunReforgeMessage 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.generateResult();
}
});
ctx.get().setPacketHandled(true);
}
}