parent
e0a01b7cf0
commit
3c2aa6649a
@ -13,6 +13,7 @@ import ru.dbotthepony.mc.otm.data.IRandomizableItem
|
|||||||
import ru.dbotthepony.mc.otm.data.ItemInInventoryCondition
|
import ru.dbotthepony.mc.otm.data.ItemInInventoryCondition
|
||||||
import ru.dbotthepony.mc.otm.data.KilledByRealPlayer
|
import ru.dbotthepony.mc.otm.data.KilledByRealPlayer
|
||||||
import ru.dbotthepony.mc.otm.data.BasicLootAppender
|
import ru.dbotthepony.mc.otm.data.BasicLootAppender
|
||||||
|
import ru.dbotthepony.mc.otm.data.KilledByRealPlayerOrIndirectly
|
||||||
import ru.dbotthepony.mc.otm.data.PlainLootAppender
|
import ru.dbotthepony.mc.otm.data.PlainLootAppender
|
||||||
import ru.dbotthepony.mc.otm.data.RandomizableItemLootAppender
|
import ru.dbotthepony.mc.otm.data.RandomizableItemLootAppender
|
||||||
import ru.dbotthepony.mc.otm.registry.MItems
|
import ru.dbotthepony.mc.otm.registry.MItems
|
||||||
@ -127,7 +128,7 @@ fun addLootModifiers(it: LootModifiers) {
|
|||||||
arrayOf(
|
arrayOf(
|
||||||
LootTableIdCondition(EntityType.ENDERMAN.defaultLootTable),
|
LootTableIdCondition(EntityType.ENDERMAN.defaultLootTable),
|
||||||
HasExosuitCondition.INVERTED,
|
HasExosuitCondition.INVERTED,
|
||||||
KilledByRealPlayer,
|
KilledByRealPlayerOrIndirectly,
|
||||||
ChanceWithPlaytimeCondition(
|
ChanceWithPlaytimeCondition(
|
||||||
minPlaytime = 20 * 60 * 10,
|
minPlaytime = 20 * 60 * 10,
|
||||||
maxPlaytime = 20 * 60 * 120,
|
maxPlaytime = 20 * 60 * 120,
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
package ru.dbotthepony.mc.otm.data
|
||||||
|
|
||||||
|
import com.google.gson.JsonDeserializationContext
|
||||||
|
import com.google.gson.JsonObject
|
||||||
|
import com.google.gson.JsonSerializationContext
|
||||||
|
import net.minecraft.world.entity.OwnableEntity
|
||||||
|
import net.minecraft.world.level.storage.loot.LootContext
|
||||||
|
import net.minecraft.world.level.storage.loot.Serializer
|
||||||
|
import net.minecraft.world.level.storage.loot.parameters.LootContextParams
|
||||||
|
import net.minecraft.world.level.storage.loot.predicates.InvertedLootItemCondition
|
||||||
|
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
|
||||||
|
import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType
|
||||||
|
import net.minecraftforge.common.util.FakePlayer
|
||||||
|
import ru.dbotthepony.mc.otm.NULLABLE_MINECRAFT_SERVER
|
||||||
|
import ru.dbotthepony.mc.otm.registry.MLootItemConditions
|
||||||
|
|
||||||
|
object KilledByRealPlayerOrIndirectly : LootItemCondition, Serializer<KilledByRealPlayerOrIndirectly>, LootItemCondition.Builder {
|
||||||
|
override fun test(t: LootContext): Boolean {
|
||||||
|
if (t.hasParam(LootContextParams.LAST_DAMAGE_PLAYER) && t[LootContextParams.LAST_DAMAGE_PLAYER] !is FakePlayer) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (t.hasParam(LootContextParams.KILLER_ENTITY)) {
|
||||||
|
val killer = t[LootContextParams.KILLER_ENTITY] as? OwnableEntity
|
||||||
|
|
||||||
|
if (killer != null) {
|
||||||
|
val owner = killer.owner
|
||||||
|
|
||||||
|
if (owner != null && owner !is FakePlayer) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
val ply = NULLABLE_MINECRAFT_SERVER?.playerList?.getPlayer(killer.ownerUUID ?: return false)
|
||||||
|
return ply != null && ply !is FakePlayer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getType(): LootItemConditionType {
|
||||||
|
return MLootItemConditions.KILLED_BY_REAL_PLAYER_OR_INDIRECTLY
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun serialize(p_79325_: JsonObject, p_79326_: KilledByRealPlayerOrIndirectly, p_79327_: JsonSerializationContext) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun deserialize(p_79323_: JsonObject, p_79324_: JsonDeserializationContext): KilledByRealPlayerOrIndirectly {
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun build(): LootItemCondition {
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
val INVERTED: LootItemCondition = InvertedLootItemCondition.invert(this).build()
|
||||||
|
}
|
@ -10,10 +10,12 @@ import ru.dbotthepony.mc.otm.data.ChanceWithPlaytimeCondition
|
|||||||
import ru.dbotthepony.mc.otm.data.HasExosuitCondition
|
import ru.dbotthepony.mc.otm.data.HasExosuitCondition
|
||||||
import ru.dbotthepony.mc.otm.data.ItemInInventoryCondition
|
import ru.dbotthepony.mc.otm.data.ItemInInventoryCondition
|
||||||
import ru.dbotthepony.mc.otm.data.KilledByRealPlayer
|
import ru.dbotthepony.mc.otm.data.KilledByRealPlayer
|
||||||
|
import ru.dbotthepony.mc.otm.data.KilledByRealPlayerOrIndirectly
|
||||||
|
|
||||||
object MLootItemConditions {
|
object MLootItemConditions {
|
||||||
val HAS_EXOSUIT = LootItemConditionType(HasExosuitCondition)
|
val HAS_EXOSUIT = LootItemConditionType(HasExosuitCondition)
|
||||||
val KILLED_BY_REAL_PLAYER = LootItemConditionType(KilledByRealPlayer)
|
val KILLED_BY_REAL_PLAYER = LootItemConditionType(KilledByRealPlayer)
|
||||||
|
val KILLED_BY_REAL_PLAYER_OR_INDIRECTLY = LootItemConditionType(KilledByRealPlayerOrIndirectly)
|
||||||
val CHANCE_WITH_PLAYTIME = LootItemConditionType(ChanceWithPlaytimeCondition)
|
val CHANCE_WITH_PLAYTIME = LootItemConditionType(ChanceWithPlaytimeCondition)
|
||||||
val ITEM_IN_INVENTORY = LootItemConditionType(ItemInInventoryCondition)
|
val ITEM_IN_INVENTORY = LootItemConditionType(ItemInInventoryCondition)
|
||||||
|
|
||||||
@ -23,6 +25,7 @@ object MLootItemConditions {
|
|||||||
Registry.LOOT_CONDITION_TYPE.register(ResourceLocation(OverdriveThatMatters.MOD_ID, "chance_with_playtime"), CHANCE_WITH_PLAYTIME)
|
Registry.LOOT_CONDITION_TYPE.register(ResourceLocation(OverdriveThatMatters.MOD_ID, "chance_with_playtime"), CHANCE_WITH_PLAYTIME)
|
||||||
Registry.LOOT_CONDITION_TYPE.register(ResourceLocation(OverdriveThatMatters.MOD_ID, "item_in_inventory"), ITEM_IN_INVENTORY)
|
Registry.LOOT_CONDITION_TYPE.register(ResourceLocation(OverdriveThatMatters.MOD_ID, "item_in_inventory"), ITEM_IN_INVENTORY)
|
||||||
Registry.LOOT_CONDITION_TYPE.register(ResourceLocation(OverdriveThatMatters.MOD_ID, "killed_by_real_player"), KILLED_BY_REAL_PLAYER)
|
Registry.LOOT_CONDITION_TYPE.register(ResourceLocation(OverdriveThatMatters.MOD_ID, "killed_by_real_player"), KILLED_BY_REAL_PLAYER)
|
||||||
|
Registry.LOOT_CONDITION_TYPE.register(ResourceLocation(OverdriveThatMatters.MOD_ID, "killed_by_real_player_or_indirectly"), KILLED_BY_REAL_PLAYER_OR_INDIRECTLY)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user