diff --git a/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java b/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java index 27ddaaef2..cde5837bb 100644 --- a/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java +++ b/src/main/java/net/mcreator/superbwarfare/block/menu/ReforgingTableMenu.java @@ -229,21 +229,21 @@ public class ReforgingTableMenu extends AbstractContainerMenu { ItemStack result = gun.copy(); if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem perkItem) { - if (gunItem.canApplyPerk(result, perkItem.getPerk())) { + if (gunItem.canApplyPerk(perkItem.getPerk())) { 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())) { + if (gunItem.canApplyPerk(perkItem.getPerk())) { 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())) { + if (gunItem.canApplyPerk(perkItem.getPerk())) { PerkHelper.setPerk(result, perkItem.getPerk(), this.damagePerkLevel.get()); this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY); } @@ -410,9 +410,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu { ItemStack funcPerk = this.container.getItem(FUNC_PERK_SLOT); ItemStack damagePerk = this.container.getItem(DAMAGE_PERK_SLOT); - boolean flag1 = ammoPerk.isEmpty() || (ammoPerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(pStack, perkItem.getPerk())); - boolean flag2 = funcPerk.isEmpty() || (funcPerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(pStack, perkItem.getPerk())); - boolean flag3 = damagePerk.isEmpty() || (damagePerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(pStack, perkItem.getPerk())); + boolean flag1 = ammoPerk.isEmpty() || (ammoPerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(perkItem.getPerk())); + boolean flag2 = funcPerk.isEmpty() || (funcPerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(perkItem.getPerk())); + boolean flag3 = damagePerk.isEmpty() || (damagePerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(perkItem.getPerk())); return flag1 && flag2 && flag3 && this.container.getItem(RESULT_SLOT).isEmpty(); } @@ -445,7 +445,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu { } public boolean mayPlace(ItemStack pStack) { - return pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == type && !container.getItem(INPUT_SLOT).isEmpty(); + return pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == type + && !container.getItem(INPUT_SLOT).isEmpty() && container.getItem(INPUT_SLOT).getItem() instanceof GunItem gunItem + && gunItem.canApplyPerk(perkItem.getPerk()); } public int getMaxStackSize() { diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/Aa12Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/Aa12Item.java index 7f214b57f..cedaece24 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/Aa12Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/Aa12Item.java @@ -8,6 +8,8 @@ import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; +import net.mcreator.superbwarfare.perk.Perk; +import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.PoseTool; import net.mcreator.superbwarfare.tools.RarityTool; @@ -78,7 +80,7 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem { transformType = type; } - private PlayState idlePredicate(AnimationState event) { + private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); @@ -123,7 +125,7 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem { return PlayState.STOP; } - private PlayState procedurePredicate(AnimationState event) { + private PlayState procedurePredicate(AnimationState event) { if (transformType != null && transformType.firstPerson()) { if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); @@ -193,4 +195,9 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem { public String getGunDisplayName() { return " AA-12"; } + + @Override + public boolean canApplyPerk(Perk perk) { + return PerkHelper.SHOTGUN_PERKS.test(perk); + } } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/Abekiri.java b/src/main/java/net/mcreator/superbwarfare/item/gun/Abekiri.java index 1e21375fd..33c438ac4 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/Abekiri.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/Abekiri.java @@ -8,6 +8,8 @@ import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; +import net.mcreator.superbwarfare.perk.Perk; +import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.PoseTool; import net.mcreator.superbwarfare.tools.TooltipTool; @@ -79,7 +81,7 @@ public class Abekiri extends GunItem implements GeoItem, AnimatedItem { transformType = type; } - private PlayState idlePredicate(AnimationState event) { + private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); @@ -116,7 +118,7 @@ public class Abekiri extends GunItem implements GeoItem, AnimatedItem { return PlayState.STOP; } - private PlayState procedurePredicate(AnimationState event) { + private PlayState procedurePredicate(AnimationState event) { if (transformType != null) { if (!(this.animationProcedure.equals("empty")) && event.getController().getAnimationState() == AnimationController.State.STOPPED) { event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); @@ -179,4 +181,9 @@ public class Abekiri extends GunItem implements GeoItem, AnimatedItem { public String getGunDisplayName() { return " Abekiri"; } + + @Override + public boolean canApplyPerk(Perk perk) { + return PerkHelper.SHOTGUN_PERKS.test(perk); + } } diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java index 8d630782f..54bbab42b 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java @@ -182,7 +182,7 @@ public abstract class GunItem extends Item { } } - public boolean canApplyPerk(ItemStack stack, Perk perk) { + public boolean canApplyPerk(Perk perk) { return true; } } diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/M4Item.java b/src/main/java/net/mcreator/superbwarfare/item/gun/M4Item.java index 4b2b1806f..de7d6b0e3 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/M4Item.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/M4Item.java @@ -8,14 +8,14 @@ import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.AnimatedItem; +import net.mcreator.superbwarfare.perk.Perk; +import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.PoseTool; -import net.mcreator.superbwarfare.tools.TooltipTool; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.InteractionHand; @@ -25,8 +25,10 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.item.*; -import net.minecraft.world.level.Level; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; import net.minecraftforge.client.extensions.common.IClientItemExtensions; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; @@ -37,7 +39,6 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; -import java.util.List; import java.util.Set; import java.util.UUID; import java.util.function.Consumer; @@ -73,7 +74,7 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem { transformType = type; } - private PlayState idlePredicate(AnimationState event) { + private PlayState idlePredicate(AnimationState event) { LocalPlayer player = Minecraft.getInstance().player; if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); @@ -118,7 +119,7 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem { return PlayState.STOP; } - private PlayState procedurePredicate(AnimationState event) { + private PlayState procedurePredicate(AnimationState event) { if (transformType != null && transformType.firstPerson()) { if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) { event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure)); @@ -158,11 +159,6 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem { return map; } - @Override - public void appendHoverText(ItemStack stack, Level world, List list, TooltipFlag flag) { - TooltipTool.addGunTips(list, stack); - } - @Override public Set getReloadSound() { return Set.of(ModSounds.M_4_RELOAD_EMPTY.get(), ModSounds.M_4_RELOAD_NORMAL.get()); @@ -188,4 +184,9 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem { public String getGunDisplayName() { return " M4A1"; } + + @Override + public boolean canApplyPerk(Perk perk) { + return PerkHelper.RIFLE_PERKS.test(perk); + } } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java b/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java index 2d176a3de..26b8e1647 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java +++ b/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java @@ -25,7 +25,6 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.PacketDistributor; -import java.util.ArrayList; import java.util.function.Supplier; @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) @@ -42,8 +41,8 @@ public class ModVariables { public static void onPlayerLoggedInSyncPlayerVariables(PlayerEvent.PlayerLoggedInEvent event) { if (event.getEntity().level().isClientSide()) return; - for (Entity entity : new ArrayList<>(event.getEntity().level().players())) { - entity.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entity); + for (Player player : event.getEntity().level().players()) { + player.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(player); } } @@ -51,8 +50,8 @@ public class ModVariables { public static void onPlayerRespawnedSyncPlayerVariables(PlayerEvent.PlayerRespawnEvent event) { if (event.getEntity().level().isClientSide()) return; - for (Entity entity : new ArrayList<>(event.getEntity().level().players())) { - entity.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entity); + for (Player player : event.getEntity().level().players()) { + player.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(player); } } @@ -60,8 +59,8 @@ public class ModVariables { public static void onPlayerChangedDimensionSyncPlayerVariables(PlayerEvent.PlayerChangedDimensionEvent event) { if (event.getEntity().level().isClientSide()) return; - for (Entity entity : new ArrayList<>(event.getEntity().level().players())) { - entity.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entity); + for (Player player : event.getEntity().level().players()) { + player.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(player); } } @@ -92,8 +91,8 @@ public class ModVariables { if (event.getEntity().level().isClientSide()) return; - for (Entity entity : new ArrayList<>(event.getEntity().level().players())) { - entity.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entity); + for (Player player : event.getEntity().level().players()) { + player.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(player); } } diff --git a/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java b/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java index e68a89883..a3b452a25 100644 --- a/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java +++ b/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java @@ -12,6 +12,7 @@ import net.minecraftforge.registries.RegistryObject; import javax.annotation.Nullable; import java.util.Optional; +import java.util.function.Predicate; public class PerkHelper { private static final String TAG_PERK_ID = "id"; @@ -178,4 +179,41 @@ public class PerkHelper { return resourceLocation.getNamespace() + ":" + resourceLocation.getPath(); } + public static final Predicate SHOTGUN_PERKS = perk -> { + switch (perk.type) { + case AMMO -> { + return true; + } + case FUNCTIONAL -> { + return perk == ModPerks.SUBSISTENCE.get(); + } + case DAMAGE -> { + return perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get(); + } + default -> { + return false; + } + } + }; + + public static final Predicate RIFLE_PERKS = perk -> { + switch (perk.type) { + case AMMO -> { + return true; + } + case FUNCTIONAL -> { + return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() || + perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get(); + } + case DAMAGE -> { + return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || + perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.HEAD_SEEKER.get(); + } + default -> { + return false; + } + } + }; + + }