添加基本perk白名单
This commit is contained in:
parent
5e2731f776
commit
442c0c5f66
7 changed files with 87 additions and 33 deletions
|
@ -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() {
|
||||
|
|
|
@ -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<Aa12Item> 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<Aa12Item> 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);
|
||||
}
|
||||
}
|
|
@ -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<Abekiri> 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<Abekiri> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -182,7 +182,7 @@ public abstract class GunItem extends Item {
|
|||
}
|
||||
}
|
||||
|
||||
public boolean canApplyPerk(ItemStack stack, Perk perk) {
|
||||
public boolean canApplyPerk(Perk perk) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<M4Item> 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<M4Item> 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<Component> list, TooltipFlag flag) {
|
||||
TooltipTool.addGunTips(list, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<SoundEvent> 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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<Perk> 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<Perk> 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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue