Instantly become android in creative

This commit is contained in:
DBotThePony 2021-12-31 14:03:36 +07:00
parent 0a72458e91
commit d923cff3f1
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 82 additions and 83 deletions

View File

@ -413,8 +413,8 @@ public class Registry {
public static final ItemGravitationalDisruptor GRAVITATIONAL_DISRUPTOR = new ItemGravitationalDisruptor(); public static final ItemGravitationalDisruptor GRAVITATIONAL_DISRUPTOR = new ItemGravitationalDisruptor();
public static final ItemPill PILL_ANDROID = new ItemPill(ItemPill.PillType.BECOME_ANDROID); public static final ItemPill PILL_ANDROID = new ItemPill(PillType.BECOME_ANDROID);
public static final ItemPill PILL_HUMANE = new ItemPill(ItemPill.PillType.BECOME_HUMANE); public static final ItemPill PILL_HUMANE = new ItemPill(PillType.BECOME_HUMANE);
public static final ItemBattery BATTERY_CRUDE = new ItemBattery(new Fraction(30_000), new Fraction(150), new Fraction(150)); public static final ItemBattery BATTERY_CRUDE = new ItemBattery(new Fraction(30_000), new Fraction(150), new Fraction(150));
public static final ItemBattery BATTERY_BASIC = new ItemBattery(new Fraction(60_000), new Fraction(300), new Fraction(300)); public static final ItemBattery BATTERY_BASIC = new ItemBattery(new Fraction(60_000), new Fraction(300), new Fraction(300));

View File

@ -1,110 +1,109 @@
package ru.dbotthepony.mc.otm.item; package ru.dbotthepony.mc.otm.item
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting
import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.network.chat.Component
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent
import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.server.level.ServerPlayer
import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder
import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player
import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.*
import net.minecraft.world.item.*; import net.minecraft.world.level.Level
import net.minecraft.world.level.Level; import net.minecraftforge.common.util.FakePlayer
import net.minecraftforge.common.util.FakePlayer; import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.OverdriveThatMatters; import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.android.AndroidCapabilityPlayer; import ru.dbotthepony.mc.otm.capability.android.AndroidCapabilityPlayer
import ru.dbotthepony.mc.otm.capability.android.IAndroidCapability;
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import javax.annotation.Nullable; enum class PillType {
import javax.annotation.ParametersAreNonnullByDefault; BECOME_ANDROID, BECOME_HUMANE
import java.util.List; }
import java.util.Optional;
@ParametersAreNonnullByDefault class ItemPill(val pillType: PillType) :
@MethodsReturnNonnullByDefault Item(Properties().stacksTo(64).rarity(Rarity.UNCOMMON).tab(OverdriveThatMatters.CREATIVE_TAB)) {
public class ItemPill extends Item {
public enum PillType { override fun getUseDuration(p_41454_: ItemStack): Int {
BECOME_ANDROID, return 32
BECOME_HUMANE
} }
public final PillType pill_type; override fun appendHoverText(
p_41421_: ItemStack,
p_41422_: Level?,
p_41423_: MutableList<Component>,
p_41424_: TooltipFlag
) {
super.appendHoverText(p_41421_, p_41422_, p_41423_, p_41424_)
public ItemPill(PillType type) { if (pillType == PillType.BECOME_ANDROID) {
super(new Properties().stacksTo(64).rarity(Rarity.UNCOMMON).tab(OverdriveThatMatters.CREATIVE_TAB)); p_41423_.add(TranslatableComponent("otm.pill.android").withStyle(ChatFormatting.GRAY))
this.pill_type = type;
}
@Override
public int getUseDuration(ItemStack p_41454_) {
return 32;
}
@Override
public void appendHoverText(ItemStack p_41421_, @Nullable Level p_41422_, List<Component> p_41423_, TooltipFlag p_41424_) {
super.appendHoverText(p_41421_, p_41422_, p_41423_, p_41424_);
if (this.pill_type == PillType.BECOME_ANDROID) {
p_41423_.add(new TranslatableComponent("otm.pill.android").withStyle(ChatFormatting.GRAY));
} else { } else {
p_41423_.add(new TranslatableComponent("otm.pill.humane").withStyle(ChatFormatting.GRAY)); p_41423_.add(TranslatableComponent("otm.pill.humane").withStyle(ChatFormatting.GRAY))
p_41423_.add(new TranslatableComponent("otm.pill.warning").withStyle(ChatFormatting.RED)); p_41423_.add(TranslatableComponent("otm.pill.warning").withStyle(ChatFormatting.RED))
} }
} }
@Override override fun use(level: Level, ply: Player, hand: InteractionHand): InteractionResultHolder<ItemStack> {
public InteractionResultHolder<ItemStack> use(Level level, Player ply, InteractionHand hand) { if (ply is FakePlayer)
if (ply instanceof FakePlayer) return super.use(level, ply, hand)
return super.use(level, ply, hand);
Optional<IAndroidCapability> resolver = ply.getCapability(MatteryCapability.ANDROID).resolve(); val resolver = ply.getCapability(MatteryCapability.ANDROID).resolve()
if (resolver.isEmpty() || !(resolver.get() instanceof AndroidCapabilityPlayer)) if (resolver.isEmpty || resolver.get() !is AndroidCapabilityPlayer)
return super.use(level, ply, hand); return super.use(level, ply, hand)
if (this.pill_type == PillType.BECOME_ANDROID && !((AndroidCapabilityPlayer) resolver.get()).isEverAndroid() || this.pill_type == PillType.BECOME_HUMANE && ((AndroidCapabilityPlayer) resolver.get()).isEverAndroid()) { val cap = resolver.get() as AndroidCapabilityPlayer
ply.startUsingItem(hand);
return InteractionResultHolder.consume(ply.getItemInHand(hand)); if (pillType == PillType.BECOME_ANDROID && !cap.isEverAndroid || pillType == PillType.BECOME_HUMANE && cap.isEverAndroid) {
ply.startUsingItem(hand)
return InteractionResultHolder.consume(ply.getItemInHand(hand))
} }
return super.use(level, ply, hand); return super.use(level, ply, hand)
} }
@Override override fun finishUsingItem(stack: ItemStack, level: Level, ent: LivingEntity): ItemStack {
public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity ent) { if (ent is FakePlayer)
if (ent instanceof FakePlayer) super.finishUsingItem(stack, level, ent)
super.finishUsingItem(stack, level, ent);
if (ent instanceof Player ply) { if (ent is Player) {
Optional<IAndroidCapability> resolver = ply.getCapability(MatteryCapability.ANDROID).resolve(); val resolver = ent.getCapability(MatteryCapability.ANDROID).resolve()
if (resolver.isEmpty() || !(resolver.get() instanceof AndroidCapabilityPlayer)) if (resolver.isEmpty || resolver.get() !is AndroidCapabilityPlayer)
return super.finishUsingItem(stack, level, ply); return super.finishUsingItem(stack, level, ent);
if (this.pill_type == PillType.BECOME_ANDROID && !((AndroidCapabilityPlayer) resolver.get()).isEverAndroid()) { val cap = resolver.get() as AndroidCapabilityPlayer
if (!ply.getAbilities().instabuild)
stack.shrink(1);
if (ply instanceof ServerPlayer) if (pillType == PillType.BECOME_ANDROID && !cap.isEverAndroid) {
((AndroidCapabilityPlayer) resolver.get()).becomeAndroidSoft(); if (ent.abilities.instabuild) {
} else if (this.pill_type == PillType.BECOME_HUMANE && ((AndroidCapabilityPlayer) resolver.get()).isEverAndroid()) { if (ent is ServerPlayer) {
if (!ply.getAbilities().instabuild) cap.becomeAndroid()
stack.shrink(1); }
} else {
stack.shrink(1)
if (ply instanceof ServerPlayer) if (ent is ServerPlayer) {
((AndroidCapabilityPlayer) resolver.get()).becomeHumaneAndKill(); cap.becomeAndroidSoft()
}
}
} else if (pillType == PillType.BECOME_HUMANE && cap.isEverAndroid) {
if (ent.abilities.instabuild) {
if (ent is ServerPlayer) {
cap.becomeHumane()
}
} else {
stack.shrink(1)
if (ent is ServerPlayer) {
cap.becomeHumaneAndKill()
}
}
} }
return stack; return stack;
} }
return super.finishUsingItem(stack, level, ent); return super.finishUsingItem(stack, level, ent)
} }
@Override override fun getUseAnimation(p_41452_: ItemStack): UseAnim = UseAnim.EAT
public UseAnim getUseAnimation(ItemStack p_41452_) { }
return UseAnim.EAT;
}
}