Gold Disk, for spawning in dungeons, add Imperfect Bread to dungeons as Gold Disk
This commit is contained in:
parent
3f677ad353
commit
1a30f4d203
@ -34,6 +34,7 @@ import ru.dbotthepony.mc.otm.datagen.items.MatteryItemModelProvider
|
||||
import ru.dbotthepony.mc.otm.datagen.lang.AddEnglishLanguage
|
||||
import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.core.util.PCG32RandomSource
|
||||
import ru.dbotthepony.mc.otm.data.FlywheelMaterialDataProvider
|
||||
import ru.dbotthepony.mc.otm.datagen.advancements.addAdvancements
|
||||
import ru.dbotthepony.mc.otm.datagen.advancements.addAndroidAdvancements
|
||||
@ -68,6 +69,10 @@ internal fun modLootTable(string: String) = ResourceKey.create(Registries.LOOT_T
|
||||
object DataGen {
|
||||
const val MOD_ID = OverdriveThatMatters.MOD_ID
|
||||
|
||||
// for things which need to be random (e.g. UUIDs),
|
||||
// so builds continue to be reproducible
|
||||
val random = PCG32RandomSource(822393994030754753L)
|
||||
|
||||
var blockModelProvider: MatteryBlockModelProvider by WriteOnce()
|
||||
private set
|
||||
var itemModelProvider: MatteryItemModelProvider by WriteOnce()
|
||||
|
@ -194,6 +194,8 @@ fun addItemModels(provider: MatteryItemModelProvider) {
|
||||
provider.generated(MItems.PATTERN_DRIVE_CREATIVE)
|
||||
provider.generated(MItems.PATTERN_DRIVE_CREATIVE2)
|
||||
|
||||
provider.withExistingParent(MItems.GOLD_DISK, MItems.PATTERN_DRIVE_CREATIVE.registryName!!)
|
||||
|
||||
provider.generated(MItems.MATTER_DUST)
|
||||
|
||||
provider.generated(MItems.TRITANIUM_DOOR.values)
|
||||
|
@ -879,6 +879,9 @@ private fun items(provider: MatteryLanguageProvider) {
|
||||
add(MItems.PATTERN_DRIVE_QUAD, "Quad-Level Pattern Drive")
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE, "Creative Pattern Drive")
|
||||
|
||||
add(MItems.GOLD_DISK, "Gold Disk")
|
||||
add(MItems.GOLD_DISK, "single_item", "Gold Disk (%s)")
|
||||
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE2, "Omni-Present Pattern Drive")
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE2, "description1", "Creative-only item")
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE2, "description2", "Holds pattern for every item that have matter value")
|
||||
|
@ -872,6 +872,9 @@ private fun items(provider: MatteryLanguageProvider) {
|
||||
add(MItems.PATTERN_DRIVE_QUAD, "Четырёхуровневый диск шаблонов")
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE, "Творческий диск шаблонов")
|
||||
|
||||
add(MItems.GOLD_DISK, "Золотой диск")
|
||||
add(MItems.GOLD_DISK, "single_item", "Золотой диск (%s)")
|
||||
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE2, "Вездесущий диск шаблонов")
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE2, "description1", "Предмет режима творчества")
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE2, "description2", "Содержит в себе шаблоны всех предметов, которые имеют значение материи")
|
||||
|
@ -5,6 +5,7 @@ import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.valueproviders.UniformInt
|
||||
import net.minecraft.world.entity.EntityType
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.level.storage.loot.BuiltInLootTables
|
||||
import net.minecraft.world.level.storage.loot.LootTable
|
||||
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
|
||||
@ -18,9 +19,11 @@ import ru.dbotthepony.mc.otm.data.condition.HasExoPackCondition
|
||||
import ru.dbotthepony.mc.otm.data.condition.ItemInInventoryCondition
|
||||
import ru.dbotthepony.mc.otm.data.condition.KilledByRealPlayerOrIndirectly
|
||||
import ru.dbotthepony.mc.otm.data.loot.LootPoolAppender
|
||||
import ru.dbotthepony.mc.otm.datagen.DataGen
|
||||
import ru.dbotthepony.mc.otm.datagen.modLootTable
|
||||
import ru.dbotthepony.mc.otm.item.ProceduralBatteryItem
|
||||
import ru.dbotthepony.mc.otm.item.exopack.ProceduralExopackSlotUpgradeItem
|
||||
import ru.dbotthepony.mc.otm.item.matter.GoldDiskItem
|
||||
import ru.dbotthepony.mc.otm.registry.game.MItems
|
||||
|
||||
@Suppress("FunctionName")
|
||||
@ -66,6 +69,11 @@ fun addLootModifiers(it: LootModifiers) {
|
||||
apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(4, 10)))
|
||||
},
|
||||
|
||||
singleItem(MItems.GOLD_DISK) {
|
||||
chanceCondition(0.1)
|
||||
apply(GoldDiskItem.patterns(DataGen.random, MItems.IMPERFECT_BREAD))
|
||||
},
|
||||
|
||||
singleItem(MItems.PROCEDURAL_BATTERY) {
|
||||
chanceCondition(0.15)
|
||||
|
||||
@ -122,6 +130,11 @@ fun addLootModifiers(it: LootModifiers) {
|
||||
chanceCondition(0.1)
|
||||
apply(ProceduralExopackSlotUpgradeItem.Randomizer(UniformInt.of(27, 56), UniformInt.of(2, 6)))
|
||||
},
|
||||
|
||||
singleItem(MItems.GOLD_DISK) {
|
||||
chanceCondition(0.15)
|
||||
apply(GoldDiskItem.patterns(DataGen.random, Items.ENDER_PEARL))
|
||||
},
|
||||
))
|
||||
|
||||
it.add("dungeon_pill", PlainLootAppender(
|
||||
|
@ -1,7 +1,13 @@
|
||||
package ru.dbotthepony.mc.otm.capability.matter
|
||||
|
||||
import net.minecraft.ChatFormatting
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.Item.TooltipContext
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.TooltipFlag
|
||||
import ru.dbotthepony.kommons.math.RGBAColor
|
||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||
import java.util.*
|
||||
import java.util.function.Predicate
|
||||
import java.util.stream.Collectors
|
||||
@ -72,3 +78,19 @@ fun IPatternStorage.getBarWidth(): Int {
|
||||
fun IPatternStorage.getBarColor(): Int {
|
||||
return RGBAColor.LOW_PATTERNS.linearInterpolation((storedPatterns / patternCapacity).toFloat(), RGBAColor.FULL_PATTERNS).toBGR()
|
||||
}
|
||||
|
||||
fun IPatternStorage.gatherTooltip(
|
||||
context: TooltipContext,
|
||||
components: MutableList<Component>,
|
||||
tooltipType: TooltipFlag
|
||||
) {
|
||||
for (state in patterns) {
|
||||
components.add(
|
||||
TranslatableComponent(
|
||||
"otm.item.pattern.line",
|
||||
state.item.getName(ItemStack(state.item, 1)),
|
||||
String.format("%.2f", state.researchPercent * 100.0)
|
||||
).withStyle(ChatFormatting.AQUA)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,84 @@
|
||||
package ru.dbotthepony.mc.otm.item.matter
|
||||
|
||||
import com.google.common.collect.ImmutableList
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.TooltipFlag
|
||||
import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction
|
||||
import net.minecraft.world.level.storage.loot.functions.SetComponentsFunction
|
||||
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||
import ru.dbotthepony.mc.otm.capability.matter.IPatternStorage
|
||||
import ru.dbotthepony.mc.otm.capability.matter.PatternInsertFailure
|
||||
import ru.dbotthepony.mc.otm.capability.matter.PatternInsertStatus
|
||||
import ru.dbotthepony.mc.otm.capability.matter.PatternState
|
||||
import ru.dbotthepony.mc.otm.capability.matter.gatherTooltip
|
||||
import ru.dbotthepony.mc.otm.core.TextComponent
|
||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||
import ru.dbotthepony.mc.otm.core.stream
|
||||
import ru.dbotthepony.mc.otm.item.MatteryItem
|
||||
import ru.dbotthepony.mc.otm.registry.CapabilitiesRegisterListener
|
||||
import ru.dbotthepony.mc.otm.registry.game.MDataComponentTypes
|
||||
import java.util.*
|
||||
import java.util.stream.Stream
|
||||
|
||||
class GoldDiskItem(parameters: Properties) : MatteryItem(parameters), CapabilitiesRegisterListener {
|
||||
override fun registerCapabilities(event: RegisterCapabilitiesEvent) {
|
||||
event.registerItem(MatteryCapability.PATTERN_ITEM, { o, _ -> ItemPatternStorageCapability(o) }, this)
|
||||
}
|
||||
|
||||
override fun getName(stack: ItemStack): Component {
|
||||
val data = stack[MDataComponentTypes.PATTERNS]
|
||||
|
||||
if (data == null || data.size > 1) {
|
||||
return super.getName(stack)
|
||||
} else if (data.size == 0 || data[0].item == Items.AIR) {
|
||||
return TranslatableComponent("$descriptionId.single_item", TextComponent("???"))
|
||||
} else {
|
||||
return TranslatableComponent("$descriptionId.single_item", data[0].item.getName(ItemStack(data[0].item)))
|
||||
}
|
||||
}
|
||||
|
||||
override fun appendHoverText(
|
||||
itemStack: ItemStack,
|
||||
context: TooltipContext,
|
||||
components: MutableList<Component>,
|
||||
tooltipType: TooltipFlag
|
||||
) {
|
||||
itemStack.getCapability(MatteryCapability.PATTERN_ITEM)?.gatherTooltip(context, components, tooltipType)
|
||||
|
||||
super.appendHoverText(itemStack, context, components, tooltipType)
|
||||
}
|
||||
|
||||
class ItemPatternStorageCapability(val stack: ItemStack) : IPatternStorage {
|
||||
override val patternCapacity: Int get() {
|
||||
return stack[MDataComponentTypes.PATTERNS]?.size ?: 0
|
||||
}
|
||||
|
||||
override val storedPatterns: Int get() {
|
||||
return patternCapacity
|
||||
}
|
||||
|
||||
override val patterns: Stream<PatternState> get() {
|
||||
return stack[MDataComponentTypes.PATTERNS]?.stream() ?: Stream.empty()
|
||||
}
|
||||
|
||||
override fun insertPattern(pattern: PatternState, onlyUpdate: Boolean, simulate: Boolean): PatternInsertStatus {
|
||||
return PatternInsertFailure
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun patterns(random: RandomSource, vararg items: Item): LootItemConditionalFunction.Builder<*> {
|
||||
return SetComponentsFunction.setComponent(
|
||||
MDataComponentTypes.PATTERNS,
|
||||
items
|
||||
.stream()
|
||||
.map { PatternState(UUID(random.nextLong(), random.nextLong()), it, 1.0) }
|
||||
.collect(ImmutableList.toImmutableList()))
|
||||
}
|
||||
}
|
||||
}
|
@ -3,7 +3,6 @@ package ru.dbotthepony.mc.otm.item.matter
|
||||
import com.google.common.collect.ImmutableList
|
||||
import net.minecraft.ChatFormatting
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Rarity
|
||||
import net.minecraft.world.item.TooltipFlag
|
||||
@ -15,23 +14,20 @@ import ru.dbotthepony.mc.otm.capability.matter.PatternInsertInserted
|
||||
import ru.dbotthepony.mc.otm.capability.matter.PatternInsertStatus
|
||||
import ru.dbotthepony.mc.otm.capability.matter.PatternInsertUpdated
|
||||
import ru.dbotthepony.mc.otm.capability.matter.PatternState
|
||||
import ru.dbotthepony.mc.otm.capability.matter.gatherTooltip
|
||||
import ru.dbotthepony.mc.otm.capability.matter.getBarColor
|
||||
import ru.dbotthepony.mc.otm.capability.matter.getBarWidth
|
||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||
import ru.dbotthepony.mc.otm.item.MatteryItem
|
||||
import ru.dbotthepony.mc.otm.registry.CapabilitiesRegisterListener
|
||||
import ru.dbotthepony.mc.otm.registry.game.MDataComponentTypes
|
||||
import java.util.stream.Stream
|
||||
|
||||
class PatternStorageItem : Item, CapabilitiesRegisterListener {
|
||||
class PatternStorageItem : MatteryItem, CapabilitiesRegisterListener {
|
||||
private val _capacity: () -> Int
|
||||
val capacity get() = _capacity.invoke()
|
||||
var isCreative: Boolean
|
||||
|
||||
constructor(capacity: Int) : super(Properties().stacksTo(1)) {
|
||||
_capacity = { capacity }
|
||||
isCreative = false
|
||||
}
|
||||
|
||||
constructor(capacity: () -> Int) : super(Properties().stacksTo(1)) {
|
||||
_capacity = capacity
|
||||
isCreative = false
|
||||
@ -47,29 +43,21 @@ class PatternStorageItem : Item, CapabilitiesRegisterListener {
|
||||
}
|
||||
|
||||
override fun appendHoverText(
|
||||
p_41421_: ItemStack,
|
||||
p_339594_: TooltipContext,
|
||||
list: MutableList<Component>,
|
||||
p_41424_: TooltipFlag
|
||||
itemStack: ItemStack,
|
||||
context: TooltipContext,
|
||||
components: MutableList<Component>,
|
||||
tooltipType: TooltipFlag
|
||||
) {
|
||||
p_41421_.getCapability(MatteryCapability.PATTERN_ITEM)?.let {
|
||||
itemStack.getCapability(MatteryCapability.PATTERN_ITEM)?.let {
|
||||
if (isCreative)
|
||||
list.add(TranslatableComponent("otm.item.pattern.infinite.stored", it.storedPatterns).withStyle(ChatFormatting.GRAY))
|
||||
components.add(TranslatableComponent("otm.item.pattern.infinite.stored", it.storedPatterns).withStyle(ChatFormatting.GRAY))
|
||||
else
|
||||
list.add(TranslatableComponent("otm.item.pattern.stored", it.storedPatterns, it.patternCapacity).withStyle(ChatFormatting.GRAY))
|
||||
components.add(TranslatableComponent("otm.item.pattern.stored", it.storedPatterns, it.patternCapacity).withStyle(ChatFormatting.GRAY))
|
||||
|
||||
for (state in it.patterns) {
|
||||
list.add(
|
||||
TranslatableComponent(
|
||||
"otm.item.pattern.line",
|
||||
state.item.getName(ItemStack(state.item, 1)),
|
||||
String.format("%.2f", state.researchPercent * 100.0)
|
||||
).withStyle(ChatFormatting.AQUA)
|
||||
)
|
||||
}
|
||||
it.gatherTooltip(context, components, tooltipType)
|
||||
}
|
||||
|
||||
super.appendHoverText(p_41421_, p_339594_, list, p_41424_)
|
||||
super.appendHoverText(itemStack, context, components, tooltipType)
|
||||
}
|
||||
|
||||
override fun isBarVisible(p_150899_: ItemStack): Boolean {
|
||||
|
@ -60,6 +60,7 @@ import ru.dbotthepony.mc.otm.item.exopack.ExopackSlotUpgradeItem
|
||||
import ru.dbotthepony.mc.otm.item.exopack.ExopackUpgradeItem
|
||||
import ru.dbotthepony.mc.otm.item.exopack.ProceduralExopackSlotUpgradeItem
|
||||
import ru.dbotthepony.mc.otm.item.matter.CreativePatternItem
|
||||
import ru.dbotthepony.mc.otm.item.matter.GoldDiskItem
|
||||
import ru.dbotthepony.mc.otm.item.matter.MatterCapacitorItem
|
||||
import ru.dbotthepony.mc.otm.item.matter.MatterDustItem
|
||||
import ru.dbotthepony.mc.otm.item.matter.PatternStorageItem
|
||||
@ -497,6 +498,8 @@ object MItems {
|
||||
val PATTERN_DRIVE_CREATIVE: Item by registry.register(MNames.PATTERN_DRIVE_CREATIVE) { PatternStorageItem() }
|
||||
val PATTERN_DRIVE_CREATIVE2: Item by registry.register(MNames.PATTERN_DRIVE_CREATIVE2) { CreativePatternItem() }
|
||||
|
||||
val GOLD_DISK: Item by registry.register("gold_disk") { GoldDiskItem(Properties().stacksTo(16).rarity(Rarity.RARE)) }
|
||||
|
||||
val PORTABLE_CONDENSATION_DRIVE: Item by registry.register(MNames.PORTABLE_CONDENSATION_DRIVE) { PortableCondensationDriveItem(4000) }
|
||||
val PORTABLE_DENSE_CONDENSATION_DRIVE: Item by registry.register(MNames.PORTABLE_DENSE_CONDENSATION_DRIVE) { PortableCondensationDriveItem(25000) }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user