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