mirror of
https://github.com/Ellpeck/NaturesAura.git
synced 2024-11-26 13:18:34 +01:00
heaps of misc changes
This commit is contained in:
parent
3077a0869a
commit
3ff0aed4ad
90 changed files with 728 additions and 516 deletions
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,17 +2,125 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:alternatives",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:alternative",
|
||||||
|
"terms": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:match_tool",
|
||||||
|
"predicate": {
|
||||||
|
"item": "minecraft:shears"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"condition": "minecraft:match_tool",
|
||||||
|
"predicate": {
|
||||||
|
"enchantments": [
|
||||||
|
{
|
||||||
|
"enchantment": "minecraft:silk_touch",
|
||||||
|
"levels": {
|
||||||
|
"min": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "naturesaura:ancient_leaves"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"condition": "minecraft:table_bonus",
|
||||||
|
"enchantment": "minecraft:fortune",
|
||||||
|
"chances": [
|
||||||
|
0.05,
|
||||||
|
0.0625,
|
||||||
|
0.083333336,
|
||||||
|
0.1
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "naturesaura:ancient_sapling"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
"type": "minecraft:item",
|
"type": "minecraft:item",
|
||||||
"name": "naturesaura:ancient_leaves"
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:table_bonus",
|
||||||
|
"enchantment": "minecraft:fortune",
|
||||||
|
"chances": [
|
||||||
|
0.02,
|
||||||
|
0.022222223,
|
||||||
|
0.025,
|
||||||
|
0.033333335,
|
||||||
|
0.1
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "minecraft:set_count",
|
||||||
|
"count": {
|
||||||
|
"min": 1.0,
|
||||||
|
"max": 2.0,
|
||||||
|
"type": "minecraft:uniform"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"function": "minecraft:explosion_decay"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "minecraft:stick"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"conditions": [
|
"conditions": [
|
||||||
{
|
{
|
||||||
"condition": "minecraft:survives_explosion"
|
"condition": "minecraft:inverted",
|
||||||
|
"term": {
|
||||||
|
"condition": "minecraft:alternative",
|
||||||
|
"terms": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:match_tool",
|
||||||
|
"predicate": {
|
||||||
|
"item": "minecraft:shears"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"condition": "minecraft:match_tool",
|
||||||
|
"predicate": {
|
||||||
|
"enchantments": [
|
||||||
|
{
|
||||||
|
"enchantment": "minecraft:silk_touch",
|
||||||
|
"levels": {
|
||||||
|
"min": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
@ -12,7 +11,17 @@
|
||||||
],
|
],
|
||||||
"conditions": [
|
"conditions": [
|
||||||
{
|
{
|
||||||
"condition": "minecraft:survives_explosion"
|
"condition": "minecraft:match_tool",
|
||||||
|
"predicate": {
|
||||||
|
"enchantments": [
|
||||||
|
{
|
||||||
|
"enchantment": "minecraft:silk_touch",
|
||||||
|
"levels": {
|
||||||
|
"min": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,17 +2,29 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
"type": "minecraft:item",
|
"type": "minecraft:item",
|
||||||
"name": "naturesaura:golden_leaves"
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"condition": "minecraft:block_state_property",
|
||||||
|
"block": "naturesaura:golden_leaves",
|
||||||
|
"properties": {
|
||||||
|
"stage": "3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "naturesaura:gold_leaf"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"conditions": [
|
"conditions": [
|
||||||
{
|
{
|
||||||
"condition": "minecraft:survives_explosion"
|
"condition": "minecraft:random_chance",
|
||||||
|
"chance": 0.75
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
"type": "minecraft:block",
|
"type": "minecraft:block",
|
||||||
"pools": [
|
"pools": [
|
||||||
{
|
{
|
||||||
"name": "main",
|
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,153 +6,211 @@ import de.ellpeck.naturesaura.api.aura.type.IAuraType;
|
||||||
import de.ellpeck.naturesaura.api.recipes.WeightedOre;
|
import de.ellpeck.naturesaura.api.recipes.WeightedOre;
|
||||||
import de.ellpeck.naturesaura.chunk.effect.OreSpawnEffect;
|
import de.ellpeck.naturesaura.chunk.effect.OreSpawnEffect;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
import net.minecraft.tags.BlockTags;
|
import net.minecraft.tags.BlockTags;
|
||||||
import net.minecraft.tags.Tag;
|
import net.minecraft.tags.Tag;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.dimension.DimensionType;
|
import net.minecraft.world.dimension.DimensionType;
|
||||||
|
import net.minecraftforge.common.ForgeConfigSpec;
|
||||||
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
// TODO configs
|
|
||||||
//@Config(modid = NaturesAura.MOD_ID, category = "")
|
|
||||||
public final class ModConfig {
|
public final class ModConfig {
|
||||||
|
|
||||||
public static General general = new General();
|
public static ModConfig instance;
|
||||||
public static Features enabledFeatures = new Features();
|
public ForgeConfigSpec.ConfigValue<List<? extends String>> additionalBotanistPickaxeConversions;
|
||||||
public static Client client = new Client();
|
public ForgeConfigSpec.ConfigValue<List<? extends String>> additionalFlowers;
|
||||||
|
public ForgeConfigSpec.ConfigValue<List<? extends String>> auraTypeOverrides;
|
||||||
|
public ForgeConfigSpec.ConfigValue<List<? extends String>> additionalOres;
|
||||||
|
public ForgeConfigSpec.ConfigValue<List<? extends String>> oreExceptions;
|
||||||
|
public ForgeConfigSpec.ConfigValue<List<? extends String>> additionalProjectiles;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Integer> fieldCreatorRange;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Double> auraToRFRatio;
|
||||||
|
|
||||||
public static class General {
|
public ForgeConfigSpec.ConfigValue<Boolean> rfConverter;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> chunkLoader;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> grassDieEffect;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> plantBoostEffect;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> cacheRechargeEffect;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> explosionEffect;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> breathlessEffect;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> animalEffect;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> oreEffect;
|
||||||
|
|
||||||
//@Comment("Additional conversion recipes for the Botanist's Pickaxe right click function. Each entry needs to be formatted as modid:input_block[prop1=value1,...]->modid:output_block[prop1=value1,...] where block state properties are optional")
|
public ForgeConfigSpec.ConfigValue<Double> particleAmount;
|
||||||
public String[] additionalBotanistPickaxeConversions = new String[0];
|
public ForgeConfigSpec.ConfigValue<Boolean> respectVanillaParticleSettings;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Double> excessParticleAmount;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Integer> auraBarLocation;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> debugText;
|
||||||
|
public ForgeConfigSpec.ConfigValue<Boolean> debugWorld;
|
||||||
|
|
||||||
//@Comment("Additional blocks that several mechanics identify as flowers. Each entry needs to be formatted as modid:block[prop1=value1,...] where block state properties are optional")
|
public ModConfig(ForgeConfigSpec.Builder builder) {
|
||||||
public String[] additionalFlowers = new String[0];
|
builder.push("general");
|
||||||
|
this.additionalBotanistPickaxeConversions = builder
|
||||||
|
.comment("Additional conversion recipes for the Botanist's Pickaxe right click function. Each entry needs to be formatted as modid:input_block[prop1=value1,...]->modid:output_block[prop1=value1,...] where block state properties are optional")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".additionalBotanistPickaxeConversions")
|
||||||
|
.defineList("additionalBotanistPickaxeConversions", Collections.emptyList(), s -> true);
|
||||||
|
this.additionalFlowers = builder
|
||||||
|
.comment("Additional blocks that several mechanics identify as flowers. Each entry needs to be formatted as modid:block[prop1=value1,...] where block state properties are optional")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".additionalFlowers")
|
||||||
|
.defineList("additionalFlowers", Collections.emptyList(), s -> true);
|
||||||
|
this.auraTypeOverrides = builder
|
||||||
|
.comment("Additional dimensions that map to Aura types that should be present in them. This is useful if you have a modpack with custom dimensions that should have Aura act similarly to an existing dimension in them. Each entry needs to be formatted as dimension_name->aura_type, where aura_type can be any of naturesaura:overworld, naturesaura:nether and naturesaura:end.")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".auraTypeOverrides")
|
||||||
|
.defineList("auraTypeOverrides", Collections.emptyList(), s -> true);
|
||||||
|
this.additionalOres = builder
|
||||||
|
.comment("Additional blocks that are recognized as generatable ores for the passive ore generation effect. Each entry needs to be formatted as oredictEntry:oreWeight:dimension where a higher weight makes the ore more likely to spawn with 5000 being the weight of coal, the default ore with the highest weight, and dimension being any of overworld and nether")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".additionalOres")
|
||||||
|
.defineList("additionalOres", Collections.emptyList(), s -> true);
|
||||||
|
this.oreExceptions = builder
|
||||||
|
.comment("Blocks that are exempt from being recognized as generatable ores for the passive ore generation effect. Each entry needs to be formatted as modid:block[prop1=value1,...] where block state properties are optional")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".oreExceptions")
|
||||||
|
.defineList("oreExceptions", Collections.emptyList(), s -> true);
|
||||||
|
this.additionalProjectiles = builder
|
||||||
|
.comment("Additional projectile types that are allowed to be consumed by the projectile generator. Each entry needs to be formatted as entity_registry_name->aura_amount")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".additionalProjectiles")
|
||||||
|
.defineList("additionalProjectiles", Collections.emptyList(), s -> true);
|
||||||
|
this.fieldCreatorRange = builder
|
||||||
|
.comment("The amount of blocks that can be between two Aura Field Creators for them to be connectable and work together")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".fieldCreatorRange")
|
||||||
|
.define("fieldCreatorRange", 10);
|
||||||
|
this.auraToRFRatio = builder
|
||||||
|
.comment("The Aura to RF ratio used by the RF converter, read as aura*ratio = rf")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".auraToRFRatio")
|
||||||
|
.define("auraToRFRatio", 0.05);
|
||||||
|
builder.pop();
|
||||||
|
|
||||||
//@Comment("Additional dimensions that map to Aura types that should be present in them. This is useful if you have a modpack with custom dimensions that should have Aura act similarly to an existing dimension in them. Each entry needs to be formatted as dimension_name->aura_type, where aura_type can be any of naturesaura:overworld, naturesaura:nether and naturesaura:end.")
|
builder.push("features");
|
||||||
public String[] auraTypeOverrides = new String[0];
|
this.rfConverter = builder
|
||||||
|
.comment("If the RF converter block should be enabled")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".rfConverter")
|
||||||
|
.define("rfConverter", true);
|
||||||
|
this.chunkLoader = builder
|
||||||
|
.comment("If the chunk loader block should be enabled")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".chunkLoader")
|
||||||
|
.define("chunkLoader", true);
|
||||||
|
this.grassDieEffect = builder
|
||||||
|
.comment("If the Aura Imbalance effect of grass and trees dying in the area if the Aura levels are too low should occur")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".grassDieEffect")
|
||||||
|
.define("grassDieEffect", true);
|
||||||
|
this.plantBoostEffect = builder
|
||||||
|
.comment("If the Aura Imbalance effect of plant growth being boosted if the Aura levels are high enough should occur")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".plantBoostEffect")
|
||||||
|
.define("plantBoostEffect", true);
|
||||||
|
this.cacheRechargeEffect = builder
|
||||||
|
.comment("If the Aura Imbalance effect of aura containers in players' inventories being filled if the Aura levels are high enough should occur")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".cacheRechargeEffect")
|
||||||
|
.define("cacheRechargeEffect", true);
|
||||||
|
this.explosionEffect = builder
|
||||||
|
.comment("If the Aura Imbalance effect of explosions happening randomly if Aura levels are too low should occur")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".explosionEffect")
|
||||||
|
.define("explosionEffect", true);
|
||||||
|
this.breathlessEffect = builder
|
||||||
|
.comment("If the Aura Imbalance effect of breathlessness if Aura levels are too low should occur")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".breathlessEffect")
|
||||||
|
.define("breathlessEffect", true);
|
||||||
|
this.animalEffect = builder
|
||||||
|
.comment("If the Aura Imbalance effect of farm animals being affected in positive ways if Aura levels are too high should occur")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".animalEffect")
|
||||||
|
.define("animalEffect", true);
|
||||||
|
this.oreEffect = builder
|
||||||
|
.comment("If the Aura Imbalance effect of ores spawning in the area if Aura levels are too high should occur")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".oreEffect")
|
||||||
|
.define("oreEffect", true);
|
||||||
|
builder.pop();
|
||||||
|
|
||||||
//@Comment("Additional blocks that are recognized as generatable ores for the passive ore generation effect. Each entry needs to be formatted as oredictEntry:oreWeight:dimension where a higher weight makes the ore more likely to spawn with 5000 being the weight of coal, the default ore with the highest weight, and dimension being any of overworld and nether")
|
builder.push("client");
|
||||||
public String[] additionalOres = new String[0];
|
this.particleAmount = builder
|
||||||
|
.comment("The percentage of particles that should be displayed, where 1 is 100% and 0 is 0%")
|
||||||
//@Comment("Blocks that are exempt from being recognized as generatable ores for the passive ore generation effect. Each entry needs to be formatted as modid:block[prop1=value1,...] where block state properties are optional")
|
.translation("config." + NaturesAura.MOD_ID + ".particleAmount")
|
||||||
public String[] oreExceptions = new String[0];
|
.defineInRange("particleAmount", 1D, 0, 1);
|
||||||
|
this.respectVanillaParticleSettings = builder
|
||||||
//@Comment("Additional projectile types that are allowed to be consumed by the projectile generator. Each entry needs to be formatted as entity_registry_name->aura_amount")
|
.comment("If particle spawning should respect the particle setting in Minecraft's video settings screen")
|
||||||
public String[] additionalProjectiles = new String[0];
|
.translation("config." + NaturesAura.MOD_ID + ".respectVanillaParticleSettings")
|
||||||
|
.define("respectVanillaParticleSettings", false);
|
||||||
//@Comment("The amount of blocks that can be between two Aura Field Creators for them to be connectable and work together")
|
this.excessParticleAmount = builder
|
||||||
public int fieldCreatorRange = 10;
|
.comment("The percentage of particles that should spawn when there is an excess amount of Aura in the environment, where 1 is 100% and 0 is 0%")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".excessParticleAmount")
|
||||||
//@Comment("The Aura to RF ratio used by the RF converter, read as aura*ratio = rf")
|
.define("excessParticleAmount", 1D);
|
||||||
public float auraToRFRatio = 0.05F;
|
this.auraBarLocation = builder
|
||||||
|
.comment("The location of the aura bar, where 0 is top left, 1 is top right, 2 is bottom left and 3 is bottom right")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".auraBarLocation")
|
||||||
|
.defineInRange("auraBarLocation", 0, 0, 3);
|
||||||
|
this.debugText = builder
|
||||||
|
.comment("If debug information about Aura around the player should be displayed in the F3 debug menu if the player is in creative mode")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".debugText")
|
||||||
|
.define("debugText", true);
|
||||||
|
this.debugWorld = builder
|
||||||
|
.comment("If, when the F3 debug menu is open and the player is in creative mode, every Aura spot should be highlighted in the world for debug purposes")
|
||||||
|
.translation("config." + NaturesAura.MOD_ID + ".debugWorld")
|
||||||
|
.define("debugWorld", false);
|
||||||
|
builder.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Features {
|
public void apply() {
|
||||||
|
try {
|
||||||
//@Comment("If using Dragon's Breath in a Brewing Stand should not cause a glass bottle to appear")
|
for (String s : this.additionalBotanistPickaxeConversions.get()) {
|
||||||
public boolean removeDragonBreathContainerItem = true;
|
String[] split = s.split("->");
|
||||||
//@Comment("If the RF converter block should be enabled")
|
NaturesAuraAPI.BOTANIST_PICKAXE_CONVERSIONS.put(
|
||||||
public boolean rfConverter = true;
|
Helper.getStateFromString(split[0]),
|
||||||
//@Comment("If the chunk loader block should be enabled")
|
Helper.getStateFromString(split[1]));
|
||||||
public boolean chunkLoader = true;
|
|
||||||
|
|
||||||
//@Comment("If the Aura Imbalance effect of grass and trees dying in the area if the Aura levels are too low should occur")
|
|
||||||
public boolean grassDieEffect = true;
|
|
||||||
//@Comment("If the Aura Imbalance effect of plant growth being boosted if the Aura levels are high enough should occur")
|
|
||||||
public boolean plantBoostEffect = true;
|
|
||||||
//@Comment("If the Aura Imbalance effect of aura containers in players' inventories being filled if the Aura levels are high enough should occur")
|
|
||||||
public boolean cacheRechargeEffect = true;
|
|
||||||
//@Comment("If the Aura Imbalance effect of explosions happening randomly if Aura levels are too low should occur")
|
|
||||||
public boolean explosionEffect = true;
|
|
||||||
//@Comment("If the Aura Imbalance effect of breathlessness if Aura levels are too low should occur")
|
|
||||||
public boolean breathlessEffect = true;
|
|
||||||
//@Comment("If the Aura Imbalance effect of farm animals being affected in positive ways if Aura levels are too high should occur")
|
|
||||||
public boolean animalEffect = true;
|
|
||||||
//@Comment("If the Aura Imbalance effect of ores spawning in the area if Aura levels are too high should occur")
|
|
||||||
public boolean oreEffect = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Client {
|
|
||||||
|
|
||||||
//@Comment("The percentage of particles that should be displayed, where 1 is 100% and 0 is 0%")
|
|
||||||
//@RangeDouble(min = 0, max = 1)
|
|
||||||
public double particleAmount = 1;
|
|
||||||
//@Comment("If particle spawning should respect the particle setting in Minecraft's video settings screen")
|
|
||||||
public boolean respectVanillaParticleSettings = true;
|
|
||||||
//@Comment("The percentage of particles that should spawn when there is an excess amount of Aura in the environment, where 1 is 100% and 0 is 0%")
|
|
||||||
public double excessParticleAmount = 1;
|
|
||||||
//@Comment("The location of the aura bar, where 0 is top left, 1 is top right, 2 is bottom left and 3 is bottom right")
|
|
||||||
//@Config.RangeInt(min = 0, max = 3)
|
|
||||||
public int auraBarLocation = 0;
|
|
||||||
|
|
||||||
//@Comment("If debug information about Aura around the player should be displayed in the F3 debug menu if the player is in creative mode")
|
|
||||||
public boolean debugText = true;
|
|
||||||
//@Comment("If, when the F3 debug menu is open and the player is in creative mode, every Aura spot should be highlighted in the world for debug purposes")
|
|
||||||
public boolean debugWorld = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void initOrReload(boolean reload) {
|
|
||||||
if (!reload) {
|
|
||||||
try {
|
|
||||||
for (String s : general.additionalBotanistPickaxeConversions) {
|
|
||||||
String[] split = s.split("->");
|
|
||||||
NaturesAuraAPI.BOTANIST_PICKAXE_CONVERSIONS.put(
|
|
||||||
Helper.getStateFromString(split[0]),
|
|
||||||
Helper.getStateFromString(split[1]));
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
NaturesAura.LOGGER.warn("Error parsing additionalBotanistPickaxeConversions", e);
|
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
NaturesAura.LOGGER.warn("Error parsing additionalBotanistPickaxeConversions", e);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (String s : general.additionalFlowers)
|
for (String s : this.additionalFlowers.get())
|
||||||
NaturesAuraAPI.FLOWERS.add(Helper.getStateFromString(s));
|
NaturesAuraAPI.FLOWERS.add(Helper.getStateFromString(s));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
NaturesAura.LOGGER.warn("Error parsing additionalFlowers", e);
|
NaturesAura.LOGGER.warn("Error parsing additionalFlowers", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (String s : general.auraTypeOverrides) {
|
for (String s : this.auraTypeOverrides.get()) {
|
||||||
String[] split = s.split("->");
|
String[] split = s.split("->");
|
||||||
IAuraType type = NaturesAuraAPI.AURA_TYPES.get(new ResourceLocation(split[1]));
|
IAuraType type = NaturesAuraAPI.AURA_TYPES.get(new ResourceLocation(split[1]));
|
||||||
if (type instanceof BasicAuraType)
|
if (type instanceof BasicAuraType)
|
||||||
((BasicAuraType) type).addDimensionType(DimensionType.byName(new ResourceLocation(split[0])));
|
((BasicAuraType) type).addDimensionType(DimensionType.byName(new ResourceLocation(split[0])));
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
NaturesAura.LOGGER.warn("Error parsing auraTypeOverrides", e);
|
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
NaturesAura.LOGGER.warn("Error parsing auraTypeOverrides", e);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (String s : general.additionalOres) {
|
for (String s : this.additionalOres.get()) {
|
||||||
String[] split = s.split(":");
|
String[] split = s.split(":");
|
||||||
Tag<Block> tag = BlockTags.getCollection().get(new ResourceLocation(split[0]));
|
Tag<Block> tag = BlockTags.getCollection().get(new ResourceLocation(split[0]));
|
||||||
WeightedOre ore = new WeightedOre(tag, Integer.parseInt(split[1]));
|
WeightedOre ore = new WeightedOre(tag, Integer.parseInt(split[1]));
|
||||||
String dimension = split[2];
|
String dimension = split[2];
|
||||||
if ("nether".equalsIgnoreCase(dimension))
|
if ("nether".equalsIgnoreCase(dimension))
|
||||||
NaturesAuraAPI.NETHER_ORES.add(ore);
|
NaturesAuraAPI.NETHER_ORES.add(ore);
|
||||||
else
|
else
|
||||||
NaturesAuraAPI.OVERWORLD_ORES.add(ore);
|
NaturesAuraAPI.OVERWORLD_ORES.add(ore);
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
NaturesAura.LOGGER.warn("Error parsing additionalOres", e);
|
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
NaturesAura.LOGGER.warn("Error parsing additionalOres", e);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (String s : general.oreExceptions)
|
for (String s : this.oreExceptions.get())
|
||||||
OreSpawnEffect.SPAWN_EXCEPTIONS.add(Helper.getStateFromString(s));
|
OreSpawnEffect.SPAWN_EXCEPTIONS.add(Helper.getStateFromString(s));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
NaturesAura.LOGGER.warn("Error parsing oreExceptions", e);
|
NaturesAura.LOGGER.warn("Error parsing oreExceptions", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (String s : general.additionalProjectiles) {
|
for (String s : this.additionalProjectiles.get()) {
|
||||||
String[] split = s.split("->");
|
String[] split = s.split("->");
|
||||||
ResourceLocation name = new ResourceLocation(split[0]);
|
ResourceLocation name = new ResourceLocation(split[0]);
|
||||||
int amount = Integer.parseInt(split[1]);
|
EntityType type = ForgeRegistries.ENTITIES.getValue(name);
|
||||||
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(name, amount);
|
int amount = Integer.parseInt(split[1]);
|
||||||
}
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(type, amount);
|
||||||
} catch (Exception e) {
|
|
||||||
NaturesAura.LOGGER.warn("Error parsing additionalProjectiles", e);
|
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
NaturesAura.LOGGER.warn("Error parsing additionalProjectiles", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,8 @@ import de.ellpeck.naturesaura.api.aura.item.IAuraRecharge;
|
||||||
import de.ellpeck.naturesaura.api.misc.IWorldData;
|
import de.ellpeck.naturesaura.api.misc.IWorldData;
|
||||||
import de.ellpeck.naturesaura.blocks.ModBlocks;
|
import de.ellpeck.naturesaura.blocks.ModBlocks;
|
||||||
import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
|
import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
|
||||||
import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities;
|
|
||||||
import de.ellpeck.naturesaura.chunk.effect.DrainSpotEffects;
|
import de.ellpeck.naturesaura.chunk.effect.DrainSpotEffects;
|
||||||
import de.ellpeck.naturesaura.compat.Compat;
|
import de.ellpeck.naturesaura.compat.Compat;
|
||||||
import de.ellpeck.naturesaura.entities.ModEntities;
|
|
||||||
import de.ellpeck.naturesaura.events.CommonEvents;
|
import de.ellpeck.naturesaura.events.CommonEvents;
|
||||||
import de.ellpeck.naturesaura.items.ModItems;
|
import de.ellpeck.naturesaura.items.ModItems;
|
||||||
import de.ellpeck.naturesaura.packet.PacketHandler;
|
import de.ellpeck.naturesaura.packet.PacketHandler;
|
||||||
|
@ -23,14 +21,14 @@ import de.ellpeck.naturesaura.reg.ModRegistry;
|
||||||
import net.minecraft.item.ItemGroup;
|
import net.minecraft.item.ItemGroup;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraftforge.common.ForgeConfigSpec;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
import net.minecraftforge.fml.ModLoadingContext;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
|
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
@ -47,9 +45,11 @@ public final class NaturesAura {
|
||||||
|
|
||||||
public NaturesAura() {
|
public NaturesAura() {
|
||||||
instance = this;
|
instance = this;
|
||||||
|
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
|
||||||
|
|
||||||
IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder();
|
||||||
eventBus.addListener(this::setup);
|
ModConfig.instance = new ModConfig(builder);
|
||||||
|
ModLoadingContext.get().registerConfig(net.minecraftforge.fml.config.ModConfig.Type.COMMON, builder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IProxy proxy = DistExecutor.runForDist(() -> ClientProxy::new, () -> ServerProxy::new);
|
public static IProxy proxy = DistExecutor.runForDist(() -> ClientProxy::new, () -> ServerProxy::new);
|
||||||
|
@ -66,12 +66,14 @@ public final class NaturesAura {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setup(FMLCommonSetupEvent event) {
|
public void setup(FMLCommonSetupEvent event) {
|
||||||
|
ModConfig.instance.apply();
|
||||||
|
|
||||||
this.preInit(event);
|
this.preInit(event);
|
||||||
this.init(event);
|
this.init(event);
|
||||||
this.postInit(event);
|
this.postInit(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void preInit(FMLCommonSetupEvent event) {
|
private void preInit(FMLCommonSetupEvent event) {
|
||||||
NaturesAuraAPI.setInstance(new InternalHooks());
|
NaturesAuraAPI.setInstance(new InternalHooks());
|
||||||
Helper.registerCap(IAuraContainer.class);
|
Helper.registerCap(IAuraContainer.class);
|
||||||
Helper.registerCap(IAuraRecharge.class);
|
Helper.registerCap(IAuraRecharge.class);
|
||||||
|
@ -91,8 +93,7 @@ public final class NaturesAura {
|
||||||
proxy.preInit(event);
|
proxy.preInit(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(FMLCommonSetupEvent event) {
|
private void init(FMLCommonSetupEvent event) {
|
||||||
ModConfig.initOrReload(false);
|
|
||||||
ModRecipes.init();
|
ModRecipes.init();
|
||||||
ModRegistry.init();
|
ModRegistry.init();
|
||||||
DrainSpotEffects.init();
|
DrainSpotEffects.init();
|
||||||
|
@ -100,13 +101,9 @@ public final class NaturesAura {
|
||||||
proxy.init(event);
|
proxy.init(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postInit(FMLCommonSetupEvent event) {
|
private void postInit(FMLCommonSetupEvent event) {
|
||||||
Compat.postInit();
|
Compat.postInit();
|
||||||
proxy.postInit(event);
|
proxy.postInit(event);
|
||||||
|
|
||||||
if (ModConfig.enabledFeatures.removeDragonBreathContainerItem) {
|
|
||||||
// TODO Items.DRAGON_BREATH.setContainerItem(null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void serverStarting(FMLServerStartingEvent event) {
|
public void serverStarting(FMLServerStartingEvent event) {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import de.ellpeck.naturesaura.api.multiblock.Matcher;
|
||||||
import de.ellpeck.naturesaura.api.recipes.*;
|
import de.ellpeck.naturesaura.api.recipes.*;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.FlowerBlock;
|
import net.minecraft.block.FlowerBlock;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.Tuple;
|
import net.minecraft.util.Tuple;
|
||||||
|
@ -129,7 +130,7 @@ public final class NaturesAuraAPI {
|
||||||
* A map of all of the entities' registry names to the amounts of aura they
|
* A map of all of the entities' registry names to the amounts of aura they
|
||||||
* each generate in the projectile generator
|
* each generate in the projectile generator
|
||||||
*/
|
*/
|
||||||
public static final Map<ResourceLocation, Integer> PROJECTILE_GENERATIONS = new HashMap<>();
|
public static final Map<EntityType, Integer> PROJECTILE_GENERATIONS = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The capability for any item or block that stores Aura in the form of an
|
* The capability for any item or block that stores Aura in the form of an
|
||||||
|
|
|
@ -5,6 +5,7 @@ import de.ellpeck.naturesaura.blocks.tiles.TileEntityAncientLeaves;
|
||||||
import de.ellpeck.naturesaura.reg.*;
|
import de.ellpeck.naturesaura.reg.*;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.LeavesBlock;
|
import net.minecraft.block.LeavesBlock;
|
||||||
|
import net.minecraft.block.SoundType;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.block.material.MaterialColor;
|
import net.minecraft.block.material.MaterialColor;
|
||||||
import net.minecraft.client.renderer.color.IBlockColor;
|
import net.minecraft.client.renderer.color.IBlockColor;
|
||||||
|
@ -23,7 +24,7 @@ public class BlockAncientLeaves extends LeavesBlock implements
|
||||||
IModItem, IModelProvider, IColorProvidingBlock, IColorProvidingItem {
|
IModItem, IModelProvider, IColorProvidingBlock, IColorProvidingItem {
|
||||||
|
|
||||||
public BlockAncientLeaves() {
|
public BlockAncientLeaves() {
|
||||||
super(ModBlocks.prop(Material.LEAVES, MaterialColor.PINK));
|
super(ModBlocks.prop(Material.LEAVES, MaterialColor.PINK).hardnessAndResistance(0.2F).tickRandomly().sound(SoundType.PLANT));
|
||||||
ModRegistry.add(this);
|
ModRegistry.add(this);
|
||||||
ModRegistry.add(new ModTileType<>(TileEntityAncientLeaves::new, this));
|
ModRegistry.add(new ModTileType<>(TileEntityAncientLeaves::new, this));
|
||||||
}
|
}
|
||||||
|
@ -39,6 +40,11 @@ public class BlockAncientLeaves extends LeavesBlock implements
|
||||||
return new TileEntityAncientLeaves();
|
return new TileEntityAncientLeaves();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasTileEntity(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
public IBlockColor getBlockColor() {
|
public IBlockColor getBlockColor() {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import de.ellpeck.naturesaura.reg.IModItem;
|
||||||
import de.ellpeck.naturesaura.reg.IModelProvider;
|
import de.ellpeck.naturesaura.reg.IModelProvider;
|
||||||
import de.ellpeck.naturesaura.reg.ModRegistry;
|
import de.ellpeck.naturesaura.reg.ModRegistry;
|
||||||
import net.minecraft.block.LogBlock;
|
import net.minecraft.block.LogBlock;
|
||||||
|
import net.minecraft.block.SoundType;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.block.material.MaterialColor;
|
import net.minecraft.block.material.MaterialColor;
|
||||||
|
|
||||||
|
@ -12,7 +13,7 @@ public class BlockAncientLog extends LogBlock implements IModItem, IModelProvide
|
||||||
private final String baseName;
|
private final String baseName;
|
||||||
|
|
||||||
public BlockAncientLog(String baseName) {
|
public BlockAncientLog(String baseName) {
|
||||||
super(MaterialColor.PURPLE, ModBlocks.prop(Material.WOOD));
|
super(MaterialColor.PURPLE, ModBlocks.prop(Material.WOOD).hardnessAndResistance(2.0F).sound(SoundType.WOOD));
|
||||||
this.baseName = baseName;
|
this.baseName = baseName;
|
||||||
ModRegistry.add(this);
|
ModRegistry.add(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package de.ellpeck.naturesaura.blocks;
|
package de.ellpeck.naturesaura.blocks;
|
||||||
|
|
||||||
|
import de.ellpeck.naturesaura.gen.WorldGenAncientTree;
|
||||||
import de.ellpeck.naturesaura.reg.IModItem;
|
import de.ellpeck.naturesaura.reg.IModItem;
|
||||||
import de.ellpeck.naturesaura.reg.IModelProvider;
|
import de.ellpeck.naturesaura.reg.IModelProvider;
|
||||||
import de.ellpeck.naturesaura.reg.ModRegistry;
|
import de.ellpeck.naturesaura.reg.ModRegistry;
|
||||||
|
@ -11,6 +12,7 @@ import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
import net.minecraft.util.math.shapes.VoxelShape;
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.gen.feature.IFeatureConfig;
|
||||||
import net.minecraftforge.event.ForgeEventFactory;
|
import net.minecraftforge.event.ForgeEventFactory;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
@ -64,8 +66,7 @@ public class BlockAncientSapling extends BushBlock implements IGrowable, IModIte
|
||||||
if (state.get(SaplingBlock.STAGE) == 0) {
|
if (state.get(SaplingBlock.STAGE) == 0) {
|
||||||
world.setBlockState(pos, state.cycle(SaplingBlock.STAGE), 4);
|
world.setBlockState(pos, state.cycle(SaplingBlock.STAGE), 4);
|
||||||
} else if (ForgeEventFactory.saplingGrowTree(world, rand, pos)) {
|
} else if (ForgeEventFactory.saplingGrowTree(world, rand, pos)) {
|
||||||
// TODO generate tree
|
new WorldGenAncientTree(true).place(world, world.getChunkProvider().getChunkGenerator(), rand, pos, IFeatureConfig.NO_FEATURE_CONFIG);
|
||||||
//new WorldGenAncientTree(true).generate(world, rand, pos);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,6 +13,7 @@ import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.fluid.IFluidState;
|
import net.minecraft.fluid.IFluidState;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.NonNullList;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
|
@ -21,11 +22,14 @@ import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.IWorldReader;
|
import net.minecraft.world.IWorldReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.gen.Heightmap;
|
import net.minecraft.world.gen.Heightmap;
|
||||||
|
import net.minecraft.world.storage.loot.LootContext;
|
||||||
|
import net.minecraft.world.storage.loot.LootParameters;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class BlockEndFlower extends BushBlock implements IModItem, IModelProvider {
|
public class BlockEndFlower extends BushBlock implements IModItem, IModelProvider {
|
||||||
|
|
||||||
|
@ -101,4 +105,12 @@ public class BlockEndFlower extends BushBlock implements IModItem, IModelProvide
|
||||||
super.harvestBlock(worldIn, player, pos, state, te, stack);
|
super.harvestBlock(worldIn, player, pos, state, te, stack);
|
||||||
worldIn.setBlockState(pos, Blocks.AIR.getDefaultState());
|
worldIn.setBlockState(pos, Blocks.AIR.getDefaultState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
|
||||||
|
TileEntity tile = builder.get(LootParameters.BLOCK_ENTITY);
|
||||||
|
if (tile instanceof TileEntityEndFlower && ((TileEntityEndFlower) tile).isDrainMode)
|
||||||
|
return NonNullList.create();
|
||||||
|
return super.getDrops(state, builder);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraft.client.util.ITooltipFlag;
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.Items;
|
import net.minecraft.item.Items;
|
||||||
|
@ -34,6 +35,7 @@ import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.AnvilUpdateEvent;
|
import net.minecraftforge.event.AnvilUpdateEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.network.NetworkHooks;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
@ -108,7 +110,7 @@ public class BlockEnderCrate extends BlockContainerImpl implements ITESRProvider
|
||||||
TileEntityEnderCrate crate = (TileEntityEnderCrate) tile;
|
TileEntityEnderCrate crate = (TileEntityEnderCrate) tile;
|
||||||
if (crate.canOpen()) {
|
if (crate.canOpen()) {
|
||||||
crate.drainAura(10000);
|
crate.drainAura(10000);
|
||||||
// TODO playerIn.openGui(NaturesAura.MOD_ID, 0, worldIn, pos.getX(), pos.getY(), pos.getZ());
|
NetworkHooks.openGui((ServerPlayerEntity) player, crate, pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,15 @@ import de.ellpeck.naturesaura.reg.IColorProvidingBlock;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.block.RedstoneWireBlock;
|
||||||
import net.minecraft.client.renderer.color.IBlockColor;
|
import net.minecraft.client.renderer.color.IBlockColor;
|
||||||
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
import net.minecraft.state.EnumProperty;
|
import net.minecraft.state.EnumProperty;
|
||||||
import net.minecraft.state.StateContainer;
|
import net.minecraft.state.StateContainer;
|
||||||
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
|
import net.minecraft.state.properties.RedstoneSide;
|
||||||
import net.minecraft.util.BlockRenderLayer;
|
import net.minecraft.util.BlockRenderLayer;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.IStringSerializable;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
import net.minecraft.util.math.shapes.VoxelShape;
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
|
@ -17,26 +20,21 @@ import net.minecraft.util.math.shapes.VoxelShapes;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.IWorld;
|
import net.minecraft.world.IWorld;
|
||||||
import net.minecraft.world.IWorldReader;
|
import net.minecraft.world.IWorldReader;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock {
|
public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock {
|
||||||
|
|
||||||
public static final EnumProperty<AttachPos> NORTH = EnumProperty.create("north", AttachPos.class);
|
public static final EnumProperty<RedstoneSide> NORTH = BlockStateProperties.REDSTONE_NORTH;
|
||||||
public static final EnumProperty<AttachPos> EAST = EnumProperty.create("east", AttachPos.class);
|
public static final EnumProperty<RedstoneSide> EAST = BlockStateProperties.REDSTONE_EAST;
|
||||||
public static final EnumProperty<AttachPos> SOUTH = EnumProperty.create("south", AttachPos.class);
|
public static final EnumProperty<RedstoneSide> SOUTH = BlockStateProperties.REDSTONE_SOUTH;
|
||||||
public static final EnumProperty<AttachPos> WEST = EnumProperty.create("west", AttachPos.class);
|
public static final EnumProperty<RedstoneSide> WEST = BlockStateProperties.REDSTONE_WEST;
|
||||||
protected static final VoxelShape[] SHAPES = new VoxelShape[]{Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D)};
|
protected static final VoxelShape[] SHAPES = new VoxelShape[]{Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D)};
|
||||||
|
|
||||||
public BlockGoldPowder() {
|
public BlockGoldPowder() {
|
||||||
super("gold_powder", ModBlocks.prop(Blocks.REDSTONE_WIRE));
|
super("gold_powder", ModBlocks.prop(Blocks.REDSTONE_WIRE));
|
||||||
this.setDefaultState(this.getDefaultState()
|
this.setDefaultState(this.stateContainer.getBaseState().with(NORTH, RedstoneSide.NONE).with(EAST, RedstoneSide.NONE).with(SOUTH, RedstoneSide.NONE).with(WEST, RedstoneSide.NONE));
|
||||||
.with(NORTH, AttachPos.NONE)
|
|
||||||
.with(EAST, AttachPos.NONE)
|
|
||||||
.with(SOUTH, AttachPos.NONE)
|
|
||||||
.with(WEST, AttachPos.NONE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -56,10 +54,10 @@ public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock {
|
||||||
|
|
||||||
private static int getShapeIndex(BlockState state) {
|
private static int getShapeIndex(BlockState state) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
boolean n = state.get(NORTH) != AttachPos.NONE;
|
boolean n = state.get(NORTH) != RedstoneSide.NONE;
|
||||||
boolean e = state.get(EAST) != AttachPos.NONE;
|
boolean e = state.get(EAST) != RedstoneSide.NONE;
|
||||||
boolean s = state.get(SOUTH) != AttachPos.NONE;
|
boolean s = state.get(SOUTH) != RedstoneSide.NONE;
|
||||||
boolean w = state.get(WEST) != AttachPos.NONE;
|
boolean w = state.get(WEST) != RedstoneSide.NONE;
|
||||||
|
|
||||||
if (n || s && !n && !e && !w) {
|
if (n || s && !n && !e && !w) {
|
||||||
i |= 1 << Direction.NORTH.getHorizontalIndex();
|
i |= 1 << Direction.NORTH.getHorizontalIndex();
|
||||||
|
@ -76,49 +74,44 @@ public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO weird gold powder thing
|
|
||||||
/*
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getActualState(BlockState state, IWorld worldIn, BlockPos pos) {
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
state = state.with(WEST, this.getAttachPosition(worldIn, pos, Direction.WEST));
|
IBlockReader iblockreader = context.getWorld();
|
||||||
state = state.with(EAST, this.getAttachPosition(worldIn, pos, Direction.EAST));
|
BlockPos blockpos = context.getPos();
|
||||||
state = state.with(NORTH, this.getAttachPosition(worldIn, pos, Direction.NORTH));
|
return this.getDefaultState().with(WEST, this.getSide(iblockreader, blockpos, Direction.WEST)).with(EAST, this.getSide(iblockreader, blockpos, Direction.EAST)).with(NORTH, this.getSide(iblockreader, blockpos, Direction.NORTH)).with(SOUTH, this.getSide(iblockreader, blockpos, Direction.SOUTH));
|
||||||
state = state.with(SOUTH, this.getAttachPosition(worldIn, pos, Direction.SOUTH));
|
|
||||||
return state;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private AttachPos getAttachPosition(IWorld worldIn, BlockPos pos, Direction direction) {
|
@Override
|
||||||
BlockPos dirPos = pos.offset(direction);
|
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) {
|
||||||
BlockState state = worldIn.getBlockState(pos.offset(direction));
|
if (facing == Direction.DOWN) {
|
||||||
|
return stateIn;
|
||||||
if (!this.canConnectTo(worldIn.getBlockState(dirPos), direction, worldIn, dirPos)
|
|
||||||
&& (state.isNormalCube(worldIn, pos.offset(direction)) || !this.canConnectUpwardsTo(worldIn, dirPos.down()))) {
|
|
||||||
BlockState iblockstate1 = worldIn.getBlockState(pos.up());
|
|
||||||
if (!iblockstate1.isNormalCube(worldIn, pos.up())) {
|
|
||||||
*//*boolean flag = worldIn.getBlockState(dirPos).isSideSolid(worldIn, dirPos, Direction.UP)
|
|
||||||
|| worldIn.getBlockState(dirPos).getBlock() == Blocks.GLOWSTONE;
|
|
||||||
if (flag && this.canConnectUpwardsTo(worldIn, dirPos.up())) {
|
|
||||||
if (state.isBlockNormalCube()) {
|
|
||||||
return AttachPos.UP;
|
|
||||||
}
|
|
||||||
return AttachPos.SIDE;
|
|
||||||
}*//*
|
|
||||||
return AttachPos.SIDE;
|
|
||||||
}
|
|
||||||
return AttachPos.NONE;
|
|
||||||
} else {
|
} else {
|
||||||
return AttachPos.SIDE;
|
return facing == Direction.UP ? stateIn.with(WEST, this.getSide(worldIn, currentPos, Direction.WEST)).with(EAST, this.getSide(worldIn, currentPos, Direction.EAST)).with(NORTH, this.getSide(worldIn, currentPos, Direction.NORTH)).with(SOUTH, this.getSide(worldIn, currentPos, Direction.SOUTH)) : stateIn.with(RedstoneWireBlock.FACING_PROPERTY_MAP.get(facing), this.getSide(worldIn, currentPos, facing));
|
||||||
}
|
}
|
||||||
}*/
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
|
||||||
return VoxelShapes.empty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private RedstoneSide getSide(IBlockReader worldIn, BlockPos pos, Direction face) {
|
||||||
public boolean isFireSource(BlockState state, IBlockReader world, BlockPos pos, Direction side) {
|
BlockPos blockpos = pos.offset(face);
|
||||||
return false;
|
BlockState blockstate = worldIn.getBlockState(blockpos);
|
||||||
|
BlockPos blockpos1 = pos.up();
|
||||||
|
BlockState blockstate1 = worldIn.getBlockState(blockpos1);
|
||||||
|
if (!blockstate1.isNormalCube(worldIn, blockpos1)) {
|
||||||
|
boolean flag = blockstate.func_224755_d(worldIn, blockpos, Direction.UP) || blockstate.getBlock() == Blocks.HOPPER;
|
||||||
|
if (flag && this.canConnectTo(worldIn.getBlockState(blockpos.up()))) {
|
||||||
|
if (blockstate.func_224756_o(worldIn, blockpos)) {
|
||||||
|
return RedstoneSide.UP;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RedstoneSide.SIDE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return !this.canConnectTo(blockstate) && (blockstate.isNormalCube(worldIn, blockpos) || !this.canConnectTo(worldIn.getBlockState(blockpos.down()))) ? RedstoneSide.NONE : RedstoneSide.SIDE;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canConnectTo(BlockState blockState) {
|
||||||
|
Block block = blockState.getBlock();
|
||||||
|
return block == this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -128,13 +121,101 @@ public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock {
|
||||||
return blockstate.func_224755_d(worldIn, blockpos, Direction.UP) || blockstate.getBlock() == Blocks.HOPPER;
|
return blockstate.func_224755_d(worldIn, blockpos, Direction.UP) || blockstate.getBlock() == Blocks.HOPPER;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canConnectUpwardsTo(IWorld worldIn, BlockPos pos) {
|
@Override
|
||||||
return this.canConnectTo(worldIn.getBlockState(pos), null, worldIn, pos);
|
public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
||||||
|
return VoxelShapes.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canConnectTo(BlockState blockState, @Nullable Direction side, IWorld world, BlockPos pos) {
|
@Override
|
||||||
Block block = blockState.getBlock();
|
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||||
return block == this;
|
if (oldState.getBlock() != state.getBlock() && !worldIn.isRemote) {
|
||||||
|
for (Direction direction : Direction.Plane.VERTICAL) {
|
||||||
|
worldIn.notifyNeighborsOfStateChange(pos.offset(direction), this);
|
||||||
|
}
|
||||||
|
for (Direction direction1 : Direction.Plane.HORIZONTAL) {
|
||||||
|
this.notifyWireNeighborsOfStateChange(worldIn, pos.offset(direction1));
|
||||||
|
}
|
||||||
|
for (Direction direction2 : Direction.Plane.HORIZONTAL) {
|
||||||
|
BlockPos blockpos = pos.offset(direction2);
|
||||||
|
if (worldIn.getBlockState(blockpos).isNormalCube(worldIn, blockpos)) {
|
||||||
|
this.notifyWireNeighborsOfStateChange(worldIn, blockpos.up());
|
||||||
|
} else {
|
||||||
|
this.notifyWireNeighborsOfStateChange(worldIn, blockpos.down());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||||
|
if (!isMoving && state.getBlock() != newState.getBlock()) {
|
||||||
|
super.onReplaced(state, worldIn, pos, newState, isMoving);
|
||||||
|
if (!worldIn.isRemote) {
|
||||||
|
for (Direction direction : Direction.values()) {
|
||||||
|
worldIn.notifyNeighborsOfStateChange(pos.offset(direction), this);
|
||||||
|
}
|
||||||
|
for (Direction direction1 : Direction.Plane.HORIZONTAL) {
|
||||||
|
this.notifyWireNeighborsOfStateChange(worldIn, pos.offset(direction1));
|
||||||
|
}
|
||||||
|
for (Direction direction2 : Direction.Plane.HORIZONTAL) {
|
||||||
|
BlockPos blockpos = pos.offset(direction2);
|
||||||
|
if (worldIn.getBlockState(blockpos).isNormalCube(worldIn, blockpos)) {
|
||||||
|
this.notifyWireNeighborsOfStateChange(worldIn, blockpos.up());
|
||||||
|
} else {
|
||||||
|
this.notifyWireNeighborsOfStateChange(worldIn, blockpos.down());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) {
|
||||||
|
if (!worldIn.isRemote) {
|
||||||
|
if (!state.isValidPosition(worldIn, pos)) {
|
||||||
|
spawnDrops(state, worldIn, pos);
|
||||||
|
worldIn.removeBlock(pos, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateDiagonalNeighbors(BlockState state, IWorld worldIn, BlockPos pos, int flags) {
|
||||||
|
try (BlockPos.PooledMutableBlockPos pool = BlockPos.PooledMutableBlockPos.retain()) {
|
||||||
|
for (Direction direction : Direction.Plane.HORIZONTAL) {
|
||||||
|
RedstoneSide redstoneside = state.get(RedstoneWireBlock.FACING_PROPERTY_MAP.get(direction));
|
||||||
|
if (redstoneside != RedstoneSide.NONE && worldIn.getBlockState(pool.setPos(pos).move(direction)).getBlock() != this) {
|
||||||
|
pool.move(Direction.DOWN);
|
||||||
|
BlockState blockstate = worldIn.getBlockState(pool);
|
||||||
|
if (blockstate.getBlock() != Blocks.OBSERVER) {
|
||||||
|
BlockPos blockpos = pool.offset(direction.getOpposite());
|
||||||
|
BlockState blockstate1 = blockstate.updatePostPlacement(direction.getOpposite(), worldIn.getBlockState(blockpos), worldIn, pool, blockpos);
|
||||||
|
replaceBlock(blockstate, blockstate1, worldIn, pool, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
pool.setPos(pos).move(direction).move(Direction.UP);
|
||||||
|
BlockState blockstate3 = worldIn.getBlockState(pool);
|
||||||
|
if (blockstate3.getBlock() != Blocks.OBSERVER) {
|
||||||
|
BlockPos blockpos1 = pool.offset(direction.getOpposite());
|
||||||
|
BlockState blockstate2 = blockstate3.updatePostPlacement(direction.getOpposite(), worldIn.getBlockState(blockpos1), worldIn, pool, blockpos1);
|
||||||
|
replaceBlock(blockstate3, blockstate2, worldIn, pool, flags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyWireNeighborsOfStateChange(World worldIn, BlockPos pos) {
|
||||||
|
if (worldIn.getBlockState(pos).getBlock() == this) {
|
||||||
|
worldIn.notifyNeighborsOfStateChange(pos, this);
|
||||||
|
|
||||||
|
for (Direction direction : Direction.values()) {
|
||||||
|
worldIn.notifyNeighborsOfStateChange(pos.offset(direction), this);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -142,25 +223,4 @@ public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock {
|
||||||
public BlockRenderLayer getRenderLayer() {
|
public BlockRenderLayer getRenderLayer() {
|
||||||
return BlockRenderLayer.CUTOUT;
|
return BlockRenderLayer.CUTOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum AttachPos implements IStringSerializable {
|
|
||||||
UP("up"),
|
|
||||||
SIDE("side"),
|
|
||||||
NONE("none");
|
|
||||||
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
AttachPos(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString() {
|
|
||||||
return this.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return this.name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import de.ellpeck.naturesaura.reg.*;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.LeavesBlock;
|
import net.minecraft.block.LeavesBlock;
|
||||||
|
import net.minecraft.block.SoundType;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.block.material.MaterialColor;
|
import net.minecraft.block.material.MaterialColor;
|
||||||
import net.minecraft.client.renderer.color.IBlockColor;
|
import net.minecraft.client.renderer.color.IBlockColor;
|
||||||
|
@ -24,11 +25,11 @@ import java.util.Random;
|
||||||
public class BlockGoldenLeaves extends LeavesBlock implements
|
public class BlockGoldenLeaves extends LeavesBlock implements
|
||||||
IModItem, IModelProvider, IColorProvidingBlock, IColorProvidingItem {
|
IModItem, IModelProvider, IColorProvidingBlock, IColorProvidingItem {
|
||||||
|
|
||||||
private static final int HIGHEST_STAGE = 3;
|
public static final int HIGHEST_STAGE = 3;
|
||||||
private static final IntegerProperty STAGE = IntegerProperty.create("stage", 0, HIGHEST_STAGE);
|
public static final IntegerProperty STAGE = IntegerProperty.create("stage", 0, HIGHEST_STAGE);
|
||||||
|
|
||||||
public BlockGoldenLeaves() {
|
public BlockGoldenLeaves() {
|
||||||
super(ModBlocks.prop(Material.LEAVES, MaterialColor.GOLD));
|
super(ModBlocks.prop(Material.LEAVES, MaterialColor.GOLD).hardnessAndResistance(0.2F).tickRandomly().sound(SoundType.PLANT));
|
||||||
ModRegistry.add(this);
|
ModRegistry.add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,15 +50,6 @@ public class BlockGoldenLeaves extends LeavesBlock implements
|
||||||
0xF2FF00, 0.5F + rand.nextFloat(), 50, 0F, false, true);
|
0xF2FF00, 0.5F + rand.nextFloat(), 50, 0F, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Replaced by json loot tables
|
|
||||||
@Override
|
|
||||||
public List<ItemStack> onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) {
|
|
||||||
NonNullList<ItemStack> drops = NonNullList.create();
|
|
||||||
this.getDrops(drops, world, pos, world.getBlockState(pos), fortune);
|
|
||||||
return drops;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
|
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
|
||||||
super.fillStateContainer(builder);
|
super.fillStateContainer(builder);
|
||||||
|
@ -84,20 +76,6 @@ public class BlockGoldenLeaves extends LeavesBlock implements
|
||||||
return (stack, tintIndex) -> 0xF2FF00;
|
return (stack, tintIndex) -> 0xF2FF00;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Replaced by json loot tables
|
|
||||||
@Override
|
|
||||||
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, BlockState state, int fortune) {
|
|
||||||
Random rand = world instanceof World ? ((World) world).rand : RANDOM;
|
|
||||||
if (state.getValue(STAGE) < HIGHEST_STAGE) {
|
|
||||||
if (rand.nextFloat() >= 0.75F) {
|
|
||||||
drops.add(new ItemStack(ModItems.GOLD_FIBER));
|
|
||||||
}
|
|
||||||
} else if (rand.nextFloat() >= 0.25F) {
|
|
||||||
drops.add(new ItemStack(ModItems.GOLD_LEAF));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void randomTick(BlockState state, World worldIn, BlockPos pos, Random random) {
|
public void randomTick(BlockState state, World worldIn, BlockPos pos, Random random) {
|
||||||
super.randomTick(state, worldIn, pos, random);
|
super.randomTick(state, worldIn, pos, random);
|
||||||
|
@ -115,6 +93,11 @@ public class BlockGoldenLeaves extends LeavesBlock implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean ticksRandomly(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean convert(World world, BlockPos pos) {
|
public static boolean convert(World world, BlockPos pos) {
|
||||||
BlockState state = world.getBlockState(pos);
|
BlockState state = world.getBlockState(pos);
|
||||||
if ((state.getBlock().isFoliage(state, world, pos) || state.getBlock() instanceof LeavesBlock) && !(state.getBlock() instanceof BlockAncientLeaves || state.getBlock() instanceof BlockGoldenLeaves)) {
|
if ((state.getBlock().isFoliage(state, world, pos) || state.getBlock() instanceof LeavesBlock) && !(state.getBlock() instanceof BlockAncientLeaves || state.getBlock() instanceof BlockGoldenLeaves)) {
|
||||||
|
|
|
@ -12,7 +12,6 @@ import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
|
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.ResourceLocation;
|
|
||||||
import net.minecraft.util.SoundCategory;
|
import net.minecraft.util.SoundCategory;
|
||||||
import net.minecraft.util.SoundEvents;
|
import net.minecraft.util.SoundEvents;
|
||||||
import net.minecraft.util.Tuple;
|
import net.minecraft.util.Tuple;
|
||||||
|
@ -24,7 +23,6 @@ import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.entity.ProjectileImpactEvent;
|
import net.minecraftforge.event.entity.ProjectileImpactEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
|
||||||
|
|
||||||
public class BlockProjectileGenerator extends BlockContainerImpl implements ITESRProvider {
|
public class BlockProjectileGenerator extends BlockContainerImpl implements ITESRProvider {
|
||||||
public BlockProjectileGenerator() {
|
public BlockProjectileGenerator() {
|
||||||
|
@ -51,8 +49,7 @@ public class BlockProjectileGenerator extends BlockContainerImpl implements ITES
|
||||||
TileEntityProjectileGenerator generator = (TileEntityProjectileGenerator) tile;
|
TileEntityProjectileGenerator generator = (TileEntityProjectileGenerator) tile;
|
||||||
if (generator.nextSide != blockRay.getFace())
|
if (generator.nextSide != blockRay.getFace())
|
||||||
return;
|
return;
|
||||||
ResourceLocation name = ForgeRegistries.ENTITIES.getKey(entity.getType());
|
Integer amount = NaturesAuraAPI.PROJECTILE_GENERATIONS.get(entity.getType());
|
||||||
Integer amount = NaturesAuraAPI.PROJECTILE_GENERATIONS.get(name);
|
|
||||||
if (amount == null || amount <= 0)
|
if (amount == null || amount <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ public final class Multiblocks {
|
||||||
'L', ModBlocks.ANCIENT_LOG,
|
'L', ModBlocks.ANCIENT_LOG,
|
||||||
'0', ModBlocks.AUTO_CRAFTER,
|
'0', ModBlocks.AUTO_CRAFTER,
|
||||||
' ', Matcher.wildcard());
|
' ', Matcher.wildcard());
|
||||||
public static final IMultiblock RF_CONVERTER = ModConfig.enabledFeatures.rfConverter ? NaturesAuraAPI.instance().createMultiblock(
|
public static final IMultiblock RF_CONVERTER = ModConfig.instance.rfConverter.get() ? NaturesAuraAPI.instance().createMultiblock(
|
||||||
new ResourceLocation(NaturesAura.MOD_ID, "rf_converter"),
|
new ResourceLocation(NaturesAura.MOD_ID, "rf_converter"),
|
||||||
new String[][]{
|
new String[][]{
|
||||||
{" ", " ", " ", " R ", " ", " ", " "},
|
{" ", " ", " ", " R ", " ", " ", " "},
|
||||||
|
|
|
@ -4,15 +4,25 @@ import de.ellpeck.naturesaura.NaturesAura;
|
||||||
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
|
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
|
||||||
import de.ellpeck.naturesaura.api.misc.IWorldData;
|
import de.ellpeck.naturesaura.api.misc.IWorldData;
|
||||||
import de.ellpeck.naturesaura.blocks.BlockEnderCrate;
|
import de.ellpeck.naturesaura.blocks.BlockEnderCrate;
|
||||||
|
import de.ellpeck.naturesaura.gui.ContainerEnderCrate;
|
||||||
|
import de.ellpeck.naturesaura.gui.ModContainers;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
|
import net.minecraft.inventory.container.Container;
|
||||||
|
import net.minecraft.inventory.container.INamedContainerProvider;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
import net.minecraft.util.text.TranslationTextComponent;
|
||||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class TileEntityEnderCrate extends TileEntityImpl {
|
public class TileEntityEnderCrate extends TileEntityImpl implements INamedContainerProvider {
|
||||||
|
|
||||||
private final IItemHandlerModifiable wrappedEnderStorage = new IItemHandlerModifiable() {
|
private final IItemHandlerModifiable wrappedEnderStorage = new IItemHandlerModifiable() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -127,4 +137,15 @@ public class TileEntityEnderCrate extends TileEntityImpl {
|
||||||
IAuraChunk.getAuraChunk(this.world, spot).drainAura(spot, amount);
|
IAuraChunk.getAuraChunk(this.world, spot).drainAura(spot, amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ITextComponent getDisplayName() {
|
||||||
|
return new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".ender_crate", TextFormatting.ITALIC + this.name + TextFormatting.RESET);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public Container createMenu(int window, PlayerInventory inv, PlayerEntity player) {
|
||||||
|
return new ContainerEnderCrate(ModContainers.ENDER_CRATE, window, player, this.getItemHandler(null));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,7 +167,7 @@ public class TileEntityFieldCreator extends TileEntityImpl implements ITickableT
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isCloseEnough(BlockPos pos) {
|
public boolean isCloseEnough(BlockPos pos) {
|
||||||
int range = ModConfig.general.fieldCreatorRange + 1;
|
int range = ModConfig.instance.fieldCreatorRange.get() + 1;
|
||||||
return this.pos.distanceSq(pos) <= range * range;
|
return this.pos.distanceSq(pos) <= range * range;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ public class TileEntityRFConverter extends TileEntityImpl implements ITickableTi
|
||||||
if (aura <= IAuraChunk.DEFAULT_AURA)
|
if (aura <= IAuraChunk.DEFAULT_AURA)
|
||||||
return;
|
return;
|
||||||
int amountToGen = Math.min(Math.min(10000, aura / 1000), emptyPart);
|
int amountToGen = Math.min(Math.min(10000, aura / 1000), emptyPart);
|
||||||
int amountToUse = MathHelper.ceil(amountToGen / ModConfig.general.auraToRFRatio);
|
int amountToUse = MathHelper.ceil(amountToGen / ModConfig.instance.auraToRFRatio.get());
|
||||||
|
|
||||||
this.storage.setEnergy(this.storage.getEnergyStored() + amountToGen);
|
this.storage.setEnergy(this.storage.getEnergyStored() + amountToGen);
|
||||||
BlockPos pos = IAuraChunk.getHighestSpot(this.world, this.pos, 45, this.pos);
|
BlockPos pos = IAuraChunk.getHighestSpot(this.world, this.pos, 45, this.pos);
|
||||||
|
|
|
@ -145,7 +145,7 @@ public class AnimalEffect implements IDrainSpotEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
||||||
return ModConfig.enabledFeatures.animalEffect;
|
return ModConfig.instance.animalEffect.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -68,7 +68,7 @@ public class BreathlessEffect implements IDrainSpotEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
||||||
return ModConfig.enabledFeatures.breathlessEffect;
|
return ModConfig.instance.breathlessEffect.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -70,7 +70,7 @@ public class CacheRechargeEffect implements IDrainSpotEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
||||||
return ModConfig.enabledFeatures.cacheRechargeEffect;
|
return ModConfig.instance.cacheRechargeEffect.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -72,7 +72,7 @@ public class ExplosionEffect implements IDrainSpotEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
||||||
return ModConfig.enabledFeatures.explosionEffect;
|
return ModConfig.instance.explosionEffect.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -81,7 +81,7 @@ public class GrassDieEffect implements IDrainSpotEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
||||||
return ModConfig.enabledFeatures.grassDieEffect && type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD);
|
return ModConfig.instance.grassDieEffect.get() && type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -130,7 +130,7 @@ public class OreSpawnEffect implements IDrainSpotEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
||||||
return ModConfig.enabledFeatures.oreEffect &&
|
return ModConfig.instance.oreEffect.get() &&
|
||||||
(type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD) || type.isSimilar(NaturesAuraAPI.TYPE_NETHER));
|
(type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD) || type.isSimilar(NaturesAuraAPI.TYPE_NETHER));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ public class PlantBoostEffect implements IDrainSpotEffect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
public boolean appliesHere(Chunk chunk, IAuraChunk auraChunk, IAuraType type) {
|
||||||
return ModConfig.enabledFeatures.plantBoostEffect && type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD);
|
return ModConfig.instance.plantBoostEffect.get() && type.isSimilar(NaturesAuraAPI.TYPE_OVERWORLD);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -2,7 +2,6 @@ package de.ellpeck.naturesaura.compat;
|
||||||
|
|
||||||
import de.ellpeck.naturesaura.compat.crafttweaker.CraftTweakerCompat;
|
import de.ellpeck.naturesaura.compat.crafttweaker.CraftTweakerCompat;
|
||||||
import de.ellpeck.naturesaura.compat.patchouli.PatchouliCompat;
|
import de.ellpeck.naturesaura.compat.patchouli.PatchouliCompat;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import net.minecraftforge.fml.ModList;
|
import net.minecraftforge.fml.ModList;
|
||||||
|
|
||||||
public final class Compat {
|
public final class Compat {
|
||||||
|
|
|
@ -30,8 +30,8 @@ public final class PatchouliCompat {
|
||||||
private static final ResourceLocation BOOK = new ResourceLocation(NaturesAura.MOD_ID, "book");
|
private static final ResourceLocation BOOK = new ResourceLocation(NaturesAura.MOD_ID, "book");
|
||||||
|
|
||||||
public static void preInit() {
|
public static void preInit() {
|
||||||
PatchouliAPI.instance.setConfigFlag(NaturesAura.MOD_ID + ":rf_converter", ModConfig.enabledFeatures.rfConverter);
|
PatchouliAPI.instance.setConfigFlag(NaturesAura.MOD_ID + ":rf_converter", ModConfig.instance.rfConverter.get());
|
||||||
PatchouliAPI.instance.setConfigFlag(NaturesAura.MOD_ID + ":chunk_loader", ModConfig.enabledFeatures.chunkLoader);
|
PatchouliAPI.instance.setConfigFlag(NaturesAura.MOD_ID + ":chunk_loader", ModConfig.instance.chunkLoader.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void preInitClient() {
|
public static void preInitClient() {
|
||||||
|
|
|
@ -77,7 +77,7 @@ public class ClientEvents {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onDebugRender(RenderGameOverlayEvent.Text event) {
|
public void onDebugRender(RenderGameOverlayEvent.Text event) {
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
if (mc.gameSettings.showDebugInfo && ModConfig.client.debugText) {
|
if (mc.gameSettings.showDebugInfo && ModConfig.instance.debugText.get()) {
|
||||||
String prefix = TextFormatting.GREEN + "[" + NaturesAura.MOD_NAME + "]" + TextFormatting.RESET + " ";
|
String prefix = TextFormatting.GREEN + "[" + NaturesAura.MOD_NAME + "]" + TextFormatting.RESET + " ";
|
||||||
List<String> left = event.getLeft();
|
List<String> left = event.getLeft();
|
||||||
left.add("");
|
left.add("");
|
||||||
|
@ -127,7 +127,7 @@ public class ClientEvents {
|
||||||
|
|
||||||
if (!mc.isGamePaused()) {
|
if (!mc.isGamePaused()) {
|
||||||
if (mc.world.getGameTime() % 20 == 0) {
|
if (mc.world.getGameTime() % 20 == 0) {
|
||||||
int amount = MathHelper.floor(190 * ModConfig.client.excessParticleAmount);
|
int amount = MathHelper.floor(190 * ModConfig.instance.excessParticleAmount.get());
|
||||||
for (int i = 0; i < amount; i++) {
|
for (int i = 0; i < amount; i++) {
|
||||||
int x = MathHelper.floor(mc.player.posX) + mc.world.rand.nextInt(64) - 32;
|
int x = MathHelper.floor(mc.player.posX) + mc.world.rand.nextInt(64) - 32;
|
||||||
int z = MathHelper.floor(mc.player.posZ) + mc.world.rand.nextInt(64) - 32;
|
int z = MathHelper.floor(mc.player.posZ) + mc.world.rand.nextInt(64) - 32;
|
||||||
|
@ -220,7 +220,7 @@ public class ClientEvents {
|
||||||
-mc.player.prevPosY - (mc.player.posY - mc.player.prevPosY) * partial - (double) MathHelper.lerp(partial, this.previousHeight, this.height),
|
-mc.player.prevPosY - (mc.player.posY - mc.player.prevPosY) * partial - (double) MathHelper.lerp(partial, this.previousHeight, this.height),
|
||||||
-mc.player.prevPosZ - (mc.player.posZ - mc.player.prevPosZ) * partial);
|
-mc.player.prevPosZ - (mc.player.posZ - mc.player.prevPosZ) * partial);
|
||||||
|
|
||||||
if (mc.gameSettings.showDebugInfo && mc.player.isCreative() && ModConfig.client.debugWorld) {
|
if (mc.gameSettings.showDebugInfo && mc.player.isCreative() && ModConfig.instance.debugWorld.get()) {
|
||||||
Map<BlockPos, Integer> spots = new HashMap<>();
|
Map<BlockPos, Integer> spots = new HashMap<>();
|
||||||
GL11.glPushMatrix();
|
GL11.glPushMatrix();
|
||||||
GL11.glDisable(GL11.GL_DEPTH_TEST);
|
GL11.glDisable(GL11.GL_DEPTH_TEST);
|
||||||
|
@ -331,7 +331,7 @@ public class ClientEvents {
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
mc.getTextureManager().bindTexture(OVERLAYS);
|
mc.getTextureManager().bindTexture(OVERLAYS);
|
||||||
|
|
||||||
int conf = ModConfig.client.auraBarLocation;
|
int conf = ModConfig.instance.auraBarLocation.get();
|
||||||
if (!mc.gameSettings.showDebugInfo && (conf != 2 || !(mc.currentScreen instanceof ChatScreen))) {
|
if (!mc.gameSettings.showDebugInfo && (conf != 2 || !(mc.currentScreen instanceof ChatScreen))) {
|
||||||
GlStateManager.color3f(83 / 255F, 160 / 255F, 8 / 255F);
|
GlStateManager.color3f(83 / 255F, 160 / 255F, 8 / 255F);
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,8 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI;
|
||||||
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
|
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
|
||||||
import de.ellpeck.naturesaura.chunk.AuraChunk;
|
import de.ellpeck.naturesaura.chunk.AuraChunk;
|
||||||
import de.ellpeck.naturesaura.chunk.AuraChunkProvider;
|
import de.ellpeck.naturesaura.chunk.AuraChunkProvider;
|
||||||
import de.ellpeck.naturesaura.misc.BlockLootProvider;
|
|
||||||
import de.ellpeck.naturesaura.misc.BlockTagProvider;
|
|
||||||
import de.ellpeck.naturesaura.misc.ItemTagProvider;
|
|
||||||
import de.ellpeck.naturesaura.misc.WorldData;
|
import de.ellpeck.naturesaura.misc.WorldData;
|
||||||
import de.ellpeck.naturesaura.packet.PacketHandler;
|
import de.ellpeck.naturesaura.packet.PacketHandler;
|
||||||
import net.minecraft.data.DataGenerator;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.chunk.Chunk;
|
import net.minecraft.world.chunk.Chunk;
|
||||||
|
@ -23,7 +19,6 @@ import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.world.ChunkWatchEvent;
|
import net.minecraftforge.event.world.ChunkWatchEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
||||||
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
|
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
@ -90,13 +85,4 @@ public class CommonEvents {
|
||||||
PacketHandler.sendTo(event.getPlayer(), auraChunk.makePacket());
|
PacketHandler.sendTo(event.getPlayer(), auraChunk.makePacket());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO config
|
|
||||||
/* @SubscribeEvent
|
|
||||||
public void onConfigChanged(OnConfigChangedEvent event) {
|
|
||||||
if (NaturesAura.MOD_ID.equals(event.getModID())) {
|
|
||||||
ConfigManager.sync(NaturesAura.MOD_ID, Config.Type.INSTANCE);
|
|
||||||
ModConfig.initOrReload(true);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,25 @@
|
||||||
/* TODO World gen
|
|
||||||
package de.ellpeck.naturesaura.gen;
|
package de.ellpeck.naturesaura.gen;
|
||||||
|
|
||||||
import de.ellpeck.naturesaura.blocks.ModBlocks;
|
import de.ellpeck.naturesaura.blocks.ModBlocks;
|
||||||
import net.minecraft.block.*;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockLog.EnumAxis;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.block.LogBlock;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.math.MutableBoundingBox;
|
import net.minecraft.util.math.MutableBoundingBox;
|
||||||
import net.minecraft.world.World;
|
|
||||||
import net.minecraft.world.gen.IWorldGenerationReader;
|
import net.minecraft.world.gen.IWorldGenerationReader;
|
||||||
import net.minecraft.world.gen.feature.AbstractTreeFeature;
|
import net.minecraft.world.gen.feature.AbstractTreeFeature;
|
||||||
|
import net.minecraft.world.gen.feature.NoFeatureConfig;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class WorldGenAncientTree extends AbstractTreeFeature {
|
public class WorldGenAncientTree extends AbstractTreeFeature<NoFeatureConfig> {
|
||||||
|
|
||||||
public WorldGenAncientTree(boolean notify) {
|
public WorldGenAncientTree(boolean notify) {
|
||||||
super(notify);
|
super(NoFeatureConfig::deserialize, notify);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -35,12 +36,12 @@ public class WorldGenAncientTree extends AbstractTreeFeature {
|
||||||
float z = (float) Math.cos(angle) * length;
|
float z = (float) Math.cos(angle) * length;
|
||||||
|
|
||||||
BlockPos goal = pos.add(x, 0, z);
|
BlockPos goal = pos.add(x, 0, z);
|
||||||
while (!world.getBlockState(goal).isFullBlock()) {
|
while (!world.hasBlockState(goal, state -> state.getMaterial().isReplaceable())) {
|
||||||
goal = goal.down();
|
goal = goal.down();
|
||||||
if (goal.distanceSq(pos) >= 10 * 10)
|
if (goal.distanceSq(pos) >= 10 * 10)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
this.makeBranch(world, pos.up(rand.nextInt(1)), goal, ModBlocks.ANCIENT_BARK.getDefaultState(), false);
|
this.makeBranch(changedBlocks, world, pos.up(rand.nextInt(1)), goal, ModBlocks.ANCIENT_BARK.getDefaultState(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Trunk
|
//Trunk
|
||||||
|
@ -48,15 +49,14 @@ public class WorldGenAncientTree extends AbstractTreeFeature {
|
||||||
for (int z = 0; z <= 1; z++) {
|
for (int z = 0; z <= 1; z++) {
|
||||||
for (int i = height - (x + z) * (rand.nextInt(2) + 2); i >= 0; i--) {
|
for (int i = height - (x + z) * (rand.nextInt(2) + 2); i >= 0; i--) {
|
||||||
BlockPos goal = pos.add(x, i, z);
|
BlockPos goal = pos.add(x, i, z);
|
||||||
if (this.isReplaceable(world, goal)) {
|
if (func_214587_a(world, goal)) {
|
||||||
this.setBlockAndNotifyAdequately(world, goal,
|
this.setBlockState(world, goal, ModBlocks.ANCIENT_LOG.getDefaultState().with(LogBlock.AXIS, Axis.Y));
|
||||||
ModBlocks.ANCIENT_LOG.getDefaultState().withProperty(LogBlock.LOG_AXIS, EnumAxis.Y));
|
changedBlocks.add(goal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.makeLeaves(world, trunkTop.up(rand.nextInt(2) - 1),
|
this.makeLeaves(changedBlocks, world, trunkTop.up(rand.nextInt(2) - 1), ModBlocks.ANCIENT_LEAVES.getDefaultState(), rand.nextInt(2) + 3, rand);
|
||||||
ModBlocks.ANCIENT_LEAVES.getDefaultState().withProperty(LeavesBlock.CHECK_DECAY, false), rand.nextInt(2) + 3, rand);
|
|
||||||
|
|
||||||
//Branches
|
//Branches
|
||||||
int branchAmount = rand.nextInt(3) + 4;
|
int branchAmount = rand.nextInt(3) + 4;
|
||||||
|
@ -67,25 +67,14 @@ public class WorldGenAncientTree extends AbstractTreeFeature {
|
||||||
float z = (float) Math.cos(angle) * length;
|
float z = (float) Math.cos(angle) * length;
|
||||||
|
|
||||||
BlockPos goal = trunkTop.add(x, rand.nextInt(3) + 1, z);
|
BlockPos goal = trunkTop.add(x, rand.nextInt(3) + 1, z);
|
||||||
this.makeBranch(world, trunkTop, goal, ModBlocks.ANCIENT_LOG.getDefaultState(), true);
|
this.makeBranch(changedBlocks, world, trunkTop, goal, ModBlocks.ANCIENT_LOG.getDefaultState(), true);
|
||||||
this.makeLeaves(world, goal,
|
this.makeLeaves(changedBlocks, world, goal, ModBlocks.ANCIENT_LEAVES.getDefaultState(), rand.nextInt(2) + 2, rand);
|
||||||
ModBlocks.ANCIENT_LEAVES.getDefaultState().withProperty(LeavesBlock.CHECK_DECAY, false), rand.nextInt(2) + 2, rand);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void makeBranch(Set changedBlocks, IWorldGenerationReader world, BlockPos first, BlockPos second, BlockState state, boolean hasAxis) {
|
||||||
protected boolean canGrowInto(Block blockType) {
|
|
||||||
if (super.canGrowInto(blockType)) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
Material material = blockType.getDefaultState().getMaterial();
|
|
||||||
return material == Material.VINE || material == Material.PLANTS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void makeBranch(World world, BlockPos first, BlockPos second, BlockState state, boolean hasAxis) {
|
|
||||||
BlockPos pos = second.add(-first.getX(), -first.getY(), -first.getZ());
|
BlockPos pos = second.add(-first.getX(), -first.getY(), -first.getZ());
|
||||||
int length = this.getHighestCoord(pos);
|
int length = this.getHighestCoord(pos);
|
||||||
float stepX = (float) pos.getX() / (float) length;
|
float stepX = (float) pos.getX() / (float) length;
|
||||||
|
@ -94,27 +83,32 @@ public class WorldGenAncientTree extends AbstractTreeFeature {
|
||||||
|
|
||||||
for (int i = 0; i <= length; i++) {
|
for (int i = 0; i <= length; i++) {
|
||||||
BlockPos goal = first.add((0.5F + i * stepX), (0.5F + i * stepY), (0.5F + i * stepZ));
|
BlockPos goal = first.add((0.5F + i * stepX), (0.5F + i * stepY), (0.5F + i * stepZ));
|
||||||
if (this.isReplaceable(world, goal)) {
|
if (func_214587_a(world, goal)) {
|
||||||
if (hasAxis) {
|
if (hasAxis) {
|
||||||
EnumAxis axis = this.getLogAxis(first, goal);
|
Axis axis = this.getLogAxis(first, goal);
|
||||||
this.setBlockAndNotifyAdequately(world, goal, state.withProperty(LogBlock.LOG_AXIS, axis));
|
this.setBlockState(world, goal, state.with(LogBlock.AXIS, axis));
|
||||||
} else {
|
} else {
|
||||||
this.setBlockAndNotifyAdequately(world, goal, state);
|
this.setBlockState(world, goal, state);
|
||||||
}
|
}
|
||||||
|
changedBlocks.add(goal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void makeLeaves(World world, BlockPos pos, BlockState state, int radius, Random rand) {
|
private void makeLeaves(Set changedBlocks, IWorldGenerationReader world, BlockPos pos, BlockState state, int radius, Random rand) {
|
||||||
for (int x = -radius; x <= radius; x++) {
|
for (int x = -radius; x <= radius; x++) {
|
||||||
for (int y = -radius; y <= radius; y++) {
|
for (int y = -radius; y <= radius; y++) {
|
||||||
for (int z = -radius; z <= radius; z++) {
|
for (int z = -radius; z <= radius; z++) {
|
||||||
BlockPos goal = pos.add(x, y, z);
|
BlockPos goal = pos.add(x, y, z);
|
||||||
if (pos.distanceSq(goal) <= radius * radius + rand.nextInt(3) - 1) {
|
if (pos.distanceSq(goal) <= radius * radius + rand.nextInt(3) - 1) {
|
||||||
if (this.isReplaceable(world, goal)) {
|
if (isAirOrLeaves(world, goal)) {
|
||||||
Block block = world.getBlockState(goal).getBlock();
|
if (world.hasBlockState(goal, st -> {
|
||||||
if (!(block instanceof LogBlock) && block != Blocks.DIRT && block != Blocks.GRASS)
|
Block block = st.getBlock();
|
||||||
this.setBlockAndNotifyAdequately(world, goal, state);
|
return !(block instanceof LogBlock) && block != Blocks.DIRT && block != Blocks.GRASS;
|
||||||
|
})) {
|
||||||
|
this.setBlockState(world, goal, state);
|
||||||
|
changedBlocks.add(goal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,18 +120,18 @@ public class WorldGenAncientTree extends AbstractTreeFeature {
|
||||||
return Math.max(MathHelper.abs(pos.getX()), Math.max(MathHelper.abs(pos.getY()), MathHelper.abs(pos.getZ())));
|
return Math.max(MathHelper.abs(pos.getX()), Math.max(MathHelper.abs(pos.getY()), MathHelper.abs(pos.getZ())));
|
||||||
}
|
}
|
||||||
|
|
||||||
private EnumAxis getLogAxis(BlockPos pos, BlockPos goal) {
|
private Axis getLogAxis(BlockPos pos, BlockPos goal) {
|
||||||
EnumAxis axis = EnumAxis.Y;
|
Axis axis = Axis.Y;
|
||||||
int x = Math.abs(goal.getX() - pos.getX());
|
int x = Math.abs(goal.getX() - pos.getX());
|
||||||
int y = Math.abs(goal.getZ() - pos.getZ());
|
int y = Math.abs(goal.getZ() - pos.getZ());
|
||||||
int highest = Math.max(x, y);
|
int highest = Math.max(x, y);
|
||||||
if (highest > 0) {
|
if (highest > 0) {
|
||||||
if (x == highest) {
|
if (x == highest) {
|
||||||
axis = EnumAxis.X;
|
axis = Axis.X;
|
||||||
} else if (y == highest) {
|
} else if (y == highest) {
|
||||||
axis = EnumAxis.Z;
|
axis = Axis.Z;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return axis;
|
return axis;
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ import net.minecraftforge.items.SlotItemHandler;
|
||||||
|
|
||||||
public class ContainerEnderCrate extends Container {
|
public class ContainerEnderCrate extends Container {
|
||||||
|
|
||||||
public ContainerEnderCrate(ContainerType<?> type, int id, PlayerEntity player, IItemHandler handler) {
|
public ContainerEnderCrate(ContainerType<ContainerEnderCrate> type, int id, PlayerEntity player, IItemHandler handler) {
|
||||||
super(type, id);
|
super(type, id);
|
||||||
int i = (3 - 4) * 18;
|
int i = (3 - 4) * 18;
|
||||||
for (int j = 0; j < 3; ++j)
|
for (int j = 0; j < 3; ++j)
|
||||||
|
|
|
@ -1,30 +1,22 @@
|
||||||
package de.ellpeck.naturesaura.gui;
|
package de.ellpeck.naturesaura.gui;
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import de.ellpeck.naturesaura.NaturesAura;
|
|
||||||
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
|
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
|
||||||
import net.minecraft.client.resources.I18n;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.inventory.container.ContainerType;
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.text.StringTextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
public class GuiEnderCrate extends ContainerScreen {
|
public class GuiEnderCrate extends ContainerScreen<ContainerEnderCrate> {
|
||||||
private static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation("textures/gui/container/generic_54.png");
|
private static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation("textures/gui/container/generic_54.png");
|
||||||
private final PlayerEntity player;
|
private final PlayerEntity player;
|
||||||
private final String nameKey;
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
public GuiEnderCrate(ContainerType<?> type, int id, PlayerEntity player, IItemHandler handler, String nameKey, String name) {
|
public GuiEnderCrate(ContainerEnderCrate container, PlayerInventory inv, ITextComponent title) {
|
||||||
super(new ContainerEnderCrate(type, id, player, handler), player.inventory, new StringTextComponent(""));
|
super(container, inv, title);
|
||||||
this.player = player;
|
this.player = inv.player;
|
||||||
this.nameKey = nameKey;
|
|
||||||
this.name = name;
|
|
||||||
this.ySize = 114 + 3 * 18;
|
this.ySize = 114 + 3 * 18;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,8 +29,7 @@ public class GuiEnderCrate extends ContainerScreen {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||||
String display = I18n.format("info." + NaturesAura.MOD_ID + "." + this.nameKey, TextFormatting.ITALIC + this.name + TextFormatting.RESET);
|
this.font.drawString(this.title.getFormattedText(), 8, 6, 4210752);
|
||||||
this.font.drawString(display, 8, 6, 4210752);
|
|
||||||
this.font.drawString(this.player.inventory.getDisplayName().getFormattedText(), 8, this.ySize - 96 + 2, 4210752);
|
this.font.drawString(this.player.inventory.getDisplayName().getFormattedText(), 8, this.ySize - 96 + 2, 4210752);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
/* TODO gui handler
|
|
||||||
|
|
||||||
package de.ellpeck.naturesaura.gui;
|
|
||||||
|
|
||||||
import de.ellpeck.naturesaura.api.misc.IWorldData;
|
|
||||||
import de.ellpeck.naturesaura.blocks.BlockEnderCrate;
|
|
||||||
import de.ellpeck.naturesaura.blocks.tiles.TileEntityEnderCrate;
|
|
||||||
import de.ellpeck.naturesaura.items.ModItems;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
import net.minecraftforge.fml.common.network.IGuiHandler;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
public class GuiHandler implements IGuiHandler {
|
|
||||||
|
|
||||||
public GuiHandler() {
|
|
||||||
//NetworkRegistry.registerGuiHandler(NaturesAura.MOD_ID, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public Object getServerGuiElement(int id, PlayerEntity player, World world, int x, int y, int z) {
|
|
||||||
if (id == 0) {
|
|
||||||
TileEntity tile = world.getTileEntity(new BlockPos(x, y, z));
|
|
||||||
if (tile instanceof TileEntityEnderCrate) {
|
|
||||||
TileEntityEnderCrate crate = (TileEntityEnderCrate) tile;
|
|
||||||
if (crate.canOpen())
|
|
||||||
return new ContainerEnderCrate(player, crate.getItemHandler(null));
|
|
||||||
}
|
|
||||||
} else if (id == 1) {
|
|
||||||
ItemStack stack = player.getHeldItemMainhand();
|
|
||||||
if (stack.getItem() == ModItems.ENDER_ACCESS) {
|
|
||||||
String name = BlockEnderCrate.getEnderName(stack);
|
|
||||||
if (name != null && !name.isEmpty())
|
|
||||||
return new ContainerEnderCrate(player, IWorldData.getOverworldData(world).getEnderStorage(name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public Object getClientGuiElement(int id, PlayerEntity player, World world, int x, int y, int z) {
|
|
||||||
if (id == 0) {
|
|
||||||
TileEntity tile = world.getTileEntity(new BlockPos(x, y, z));
|
|
||||||
if (tile instanceof TileEntityEnderCrate) {
|
|
||||||
TileEntityEnderCrate crate = (TileEntityEnderCrate) tile;
|
|
||||||
if (crate.canOpen())
|
|
||||||
return new GuiEnderCrate(player, crate.getItemHandler(null), "ender_crate", crate.name);
|
|
||||||
}
|
|
||||||
} else if (id == 1) {
|
|
||||||
ItemStack stack = player.getHeldItemMainhand();
|
|
||||||
if (stack.getItem() == ModItems.ENDER_ACCESS) {
|
|
||||||
String name = BlockEnderCrate.getEnderName(stack);
|
|
||||||
if (name != null && !name.isEmpty())
|
|
||||||
return new GuiEnderCrate(player, IWorldData.getOverworldData(world).getEnderStorage(name), "ender_access", name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
10
src/main/java/de/ellpeck/naturesaura/gui/ModContainers.java
Normal file
10
src/main/java/de/ellpeck/naturesaura/gui/ModContainers.java
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
package de.ellpeck.naturesaura.gui;
|
||||||
|
|
||||||
|
import net.minecraft.inventory.container.ContainerType;
|
||||||
|
|
||||||
|
@SuppressWarnings("FieldNamingConvention")
|
||||||
|
public final class ModContainers {
|
||||||
|
|
||||||
|
public static ContainerType<ContainerEnderCrate> ENDER_CRATE;
|
||||||
|
public static ContainerType<ContainerEnderCrate> ENDER_ACCESS;
|
||||||
|
}
|
|
@ -3,17 +3,28 @@ package de.ellpeck.naturesaura.items;
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import de.ellpeck.naturesaura.NaturesAura;
|
import de.ellpeck.naturesaura.NaturesAura;
|
||||||
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
|
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
|
||||||
|
import de.ellpeck.naturesaura.api.misc.IWorldData;
|
||||||
import de.ellpeck.naturesaura.blocks.BlockEnderCrate;
|
import de.ellpeck.naturesaura.blocks.BlockEnderCrate;
|
||||||
|
import de.ellpeck.naturesaura.gui.ContainerEnderCrate;
|
||||||
|
import de.ellpeck.naturesaura.gui.ModContainers;
|
||||||
import net.minecraft.client.util.ITooltipFlag;
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
|
import net.minecraft.inventory.container.Container;
|
||||||
|
import net.minecraft.inventory.container.INamedContainerProvider;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.ActionResult;
|
||||||
import net.minecraft.util.ActionResultType;
|
import net.minecraft.util.ActionResultType;
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.text.ITextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
import net.minecraft.util.text.TranslationTextComponent;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import net.minecraftforge.fml.network.NetworkHooks;
|
||||||
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -28,15 +39,28 @@ public class EnderAccess extends ItemImpl {
|
||||||
if (handIn != Hand.MAIN_HAND)
|
if (handIn != Hand.MAIN_HAND)
|
||||||
return new ActionResult<>(ActionResultType.PASS, playerIn.getHeldItem(handIn));
|
return new ActionResult<>(ActionResultType.PASS, playerIn.getHeldItem(handIn));
|
||||||
ItemStack stack = playerIn.getHeldItemMainhand();
|
ItemStack stack = playerIn.getHeldItemMainhand();
|
||||||
if (!Strings.isNullOrEmpty(BlockEnderCrate.getEnderName(stack))) {
|
String name = BlockEnderCrate.getEnderName(stack);
|
||||||
if (!worldIn.isRemote && NaturesAuraAPI.instance().extractAuraFromPlayer(playerIn, 10000, false))
|
if (!Strings.isNullOrEmpty(name)) {
|
||||||
// TODO playerIn.openGui(NaturesAura.MOD_ID, 1, worldIn, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ);
|
if (!worldIn.isRemote && NaturesAuraAPI.instance().extractAuraFromPlayer(playerIn, 10000, false)) {
|
||||||
|
NetworkHooks.openGui((ServerPlayerEntity) playerIn, new INamedContainerProvider() {
|
||||||
|
@Override
|
||||||
|
public ITextComponent getDisplayName() {
|
||||||
|
return new TranslationTextComponent("info." + NaturesAura.MOD_ID + ".ender_access", TextFormatting.ITALIC + name + TextFormatting.RESET);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public Container createMenu(int windowId, PlayerInventory inv, PlayerEntity player) {
|
||||||
|
IItemHandler handler = IWorldData.getOverworldData(inv.player.world).getEnderStorage(name);
|
||||||
|
return new ContainerEnderCrate(ModContainers.ENDER_ACCESS, windowId, player, handler);
|
||||||
|
}
|
||||||
|
}, buffer -> buffer.writeString(name));
|
||||||
|
}
|
||||||
return new ActionResult<>(ActionResultType.SUCCESS, stack);
|
return new ActionResult<>(ActionResultType.SUCCESS, stack);
|
||||||
}
|
}
|
||||||
return new ActionResult<>(ActionResultType.FAIL, stack);
|
return new ActionResult<>(ActionResultType.FAIL, stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
public void addInformation(ItemStack stack, @Nullable World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
|
public void addInformation(ItemStack stack, @Nullable World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class Hoe extends HoeItem implements IModItem, IModelProvider {
|
||||||
Random random = world.getRandom();
|
Random random = world.getRandom();
|
||||||
BlockPos pos = context.getPos();
|
BlockPos pos = context.getPos();
|
||||||
if (random.nextInt(5) == 0) {
|
if (random.nextInt(5) == 0) {
|
||||||
seed = new ItemStack(Items.WHEAT_SEEDS); // TODO Change this to spawn random seed dropped by tall grass
|
seed = new ItemStack(Items.WHEAT_SEEDS);
|
||||||
} else if (random.nextInt(10) == 0) {
|
} else if (random.nextInt(10) == 0) {
|
||||||
int rand = random.nextInt(3);
|
int rand = random.nextInt(3);
|
||||||
if (rand == 0) {
|
if (rand == 0) {
|
||||||
|
|
|
@ -2,21 +2,21 @@ package de.ellpeck.naturesaura.misc;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
import de.ellpeck.naturesaura.blocks.BlockGoldenLeaves;
|
||||||
|
import de.ellpeck.naturesaura.blocks.ModBlocks;
|
||||||
import de.ellpeck.naturesaura.blocks.Slab;
|
import de.ellpeck.naturesaura.blocks.Slab;
|
||||||
|
import de.ellpeck.naturesaura.items.ModItems;
|
||||||
import de.ellpeck.naturesaura.reg.IModItem;
|
import de.ellpeck.naturesaura.reg.IModItem;
|
||||||
import de.ellpeck.naturesaura.reg.ModRegistry;
|
import de.ellpeck.naturesaura.reg.ModRegistry;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.SlabBlock;
|
|
||||||
import net.minecraft.data.DataGenerator;
|
import net.minecraft.data.DataGenerator;
|
||||||
import net.minecraft.data.DirectoryCache;
|
import net.minecraft.data.DirectoryCache;
|
||||||
import net.minecraft.data.IDataProvider;
|
import net.minecraft.data.IDataProvider;
|
||||||
import net.minecraft.state.properties.SlabType;
|
import net.minecraft.data.loot.BlockLootTables;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.storage.loot.*;
|
import net.minecraft.world.storage.loot.*;
|
||||||
import net.minecraft.world.storage.loot.conditions.BlockStateProperty;
|
import net.minecraft.world.storage.loot.conditions.BlockStateProperty;
|
||||||
import net.minecraft.world.storage.loot.conditions.SurvivesExplosion;
|
import net.minecraft.world.storage.loot.conditions.RandomChance;
|
||||||
import net.minecraft.world.storage.loot.functions.ExplosionDecay;
|
|
||||||
import net.minecraft.world.storage.loot.functions.SetCount;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -38,11 +38,16 @@ public class BlockLootProvider implements IDataProvider {
|
||||||
continue;
|
continue;
|
||||||
Block block = (Block) item;
|
Block block = (Block) item;
|
||||||
if (block instanceof Slab) {
|
if (block instanceof Slab) {
|
||||||
this.lootFunctions.put(block, BlockLootProvider::genSlab);
|
this.lootFunctions.put(block, LootTableHooks::genSlab);
|
||||||
} else {
|
} else {
|
||||||
this.lootFunctions.put(block, BlockLootProvider::genRegular);
|
this.lootFunctions.put(block, LootTableHooks::genRegular);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.lootFunctions.put(ModBlocks.ANCIENT_LEAVES, b -> LootTableHooks.genLeaves(b, ModBlocks.ANCIENT_SAPLING));
|
||||||
|
this.lootFunctions.put(ModBlocks.DECAYED_LEAVES, LootTableHooks::genSilkOnly);
|
||||||
|
this.lootFunctions.put(ModBlocks.GOLDEN_LEAVES, b -> LootTable.builder().addLootPool(LootPool.builder().rolls(ConstantRange.of(1)).addEntry(LootTableHooks.survivesExplosion(b, ItemLootEntry.builder(ModItems.GOLD_LEAF)).acceptCondition(BlockStateProperty.builder(b).with(BlockGoldenLeaves.STAGE, BlockGoldenLeaves.HIGHEST_STAGE))).acceptCondition(RandomChance.builder(0.75F))));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -56,22 +61,8 @@ public class BlockLootProvider implements IDataProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Path getPath(Path root, ResourceLocation id) {
|
private static Path getPath(Path root, ResourceLocation res) {
|
||||||
return root.resolve("data/" + id.getNamespace() + "/loot_tables/blocks/" + id.getPath() + ".json");
|
return root.resolve("data/" + res.getNamespace() + "/loot_tables/blocks/" + res.getPath() + ".json");
|
||||||
}
|
|
||||||
|
|
||||||
private static LootTable.Builder genSlab(Block b) {
|
|
||||||
LootEntry.Builder<?> entry = ItemLootEntry.builder(b)
|
|
||||||
.acceptFunction(SetCount.func_215932_a(ConstantRange.of(2)).acceptCondition(BlockStateProperty.builder(b).with(SlabBlock.TYPE, SlabType.DOUBLE)))
|
|
||||||
.acceptFunction(ExplosionDecay.func_215863_b());
|
|
||||||
return LootTable.builder().addLootPool(LootPool.builder().name("main").rolls(ConstantRange.of(1)).addEntry(entry));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static LootTable.Builder genRegular(Block b) {
|
|
||||||
LootEntry.Builder<?> entry = ItemLootEntry.builder(b);
|
|
||||||
LootPool.Builder pool = LootPool.builder().name("main").rolls(ConstantRange.of(1)).addEntry(entry)
|
|
||||||
.acceptCondition(SurvivesExplosion.builder());
|
|
||||||
return LootTable.builder().addLootPool(pool);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
|
@ -79,4 +70,27 @@ public class BlockLootProvider implements IDataProvider {
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "Nature's Aura Loot";
|
return "Nature's Aura Loot";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// What a mess
|
||||||
|
private static class LootTableHooks extends BlockLootTables {
|
||||||
|
public static LootTable.Builder genLeaves(Block block, Block drop) {
|
||||||
|
return func_218540_a(block, drop, 0.05F, 0.0625F, 0.083333336F, 0.1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LootTable.Builder genSlab(Block block) {
|
||||||
|
return func_218513_d(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LootTable.Builder genRegular(Block block) {
|
||||||
|
return func_218546_a(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LootTable.Builder genSilkOnly(Block block) {
|
||||||
|
return func_218561_b(block);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> T survivesExplosion(Block block, ILootConditionConsumer<T> then) {
|
||||||
|
return func_218560_a(block, then);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -9,6 +9,7 @@ import net.minecraft.client.renderer.ActiveRenderInfo;
|
||||||
import net.minecraft.client.renderer.BufferBuilder;
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
import net.minecraft.client.renderer.Tessellator;
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||||
|
import net.minecraft.client.settings.ParticleStatus;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
@ -29,14 +30,14 @@ public final class ParticleHandler {
|
||||||
public static void spawnParticle(Supplier<Particle> particle, double x, double y, double z) {
|
public static void spawnParticle(Supplier<Particle> particle, double x, double y, double z) {
|
||||||
if (Minecraft.getInstance().player.getDistanceSq(x, y, z) <= range * range) {
|
if (Minecraft.getInstance().player.getDistanceSq(x, y, z) <= range * range) {
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
if (ModConfig.client.respectVanillaParticleSettings) {
|
if (ModConfig.instance.respectVanillaParticleSettings.get()) {
|
||||||
int setting = mc.gameSettings.particles.func_216832_b();
|
ParticleStatus setting = mc.gameSettings.particles;
|
||||||
if (setting != 0 &&
|
if (setting != ParticleStatus.ALL &&
|
||||||
(setting != 1 || mc.world.rand.nextInt(3) != 0) &&
|
(setting != ParticleStatus.DECREASED || mc.world.rand.nextInt(3) != 0) &&
|
||||||
(setting != 2 || mc.world.rand.nextInt(10) != 0))
|
(setting != ParticleStatus.MINIMAL || mc.world.rand.nextInt(10) != 0))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
double setting = ModConfig.client.particleAmount;
|
double setting = ModConfig.instance.particleAmount.get();
|
||||||
if (setting < 1 && mc.world.rand.nextDouble() > setting)
|
if (setting < 1 && mc.world.rand.nextDouble() > setting)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ package de.ellpeck.naturesaura.proxy;
|
||||||
|
|
||||||
import de.ellpeck.naturesaura.compat.Compat;
|
import de.ellpeck.naturesaura.compat.Compat;
|
||||||
import de.ellpeck.naturesaura.events.ClientEvents;
|
import de.ellpeck.naturesaura.events.ClientEvents;
|
||||||
|
import de.ellpeck.naturesaura.gui.GuiEnderCrate;
|
||||||
|
import de.ellpeck.naturesaura.gui.ModContainers;
|
||||||
import de.ellpeck.naturesaura.particles.ParticleHandler;
|
import de.ellpeck.naturesaura.particles.ParticleHandler;
|
||||||
import de.ellpeck.naturesaura.particles.ParticleMagic;
|
import de.ellpeck.naturesaura.particles.ParticleMagic;
|
||||||
import de.ellpeck.naturesaura.reg.IColorProvidingBlock;
|
import de.ellpeck.naturesaura.reg.IColorProvidingBlock;
|
||||||
|
@ -11,6 +13,7 @@ import de.ellpeck.naturesaura.renderers.PlayerLayerTrinkets;
|
||||||
import de.ellpeck.naturesaura.renderers.SupporterFancyHandler;
|
import de.ellpeck.naturesaura.renderers.SupporterFancyHandler;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.ScreenManager;
|
||||||
import net.minecraft.client.renderer.color.IItemColor;
|
import net.minecraft.client.renderer.color.IItemColor;
|
||||||
import net.minecraft.client.renderer.color.ItemColors;
|
import net.minecraft.client.renderer.color.ItemColors;
|
||||||
import net.minecraft.client.renderer.entity.PlayerRenderer;
|
import net.minecraft.client.renderer.entity.PlayerRenderer;
|
||||||
|
@ -33,6 +36,8 @@ public class ClientProxy implements IProxy {
|
||||||
public void preInit(FMLCommonSetupEvent event) {
|
public void preInit(FMLCommonSetupEvent event) {
|
||||||
MinecraftForge.EVENT_BUS.register(new ClientEvents());
|
MinecraftForge.EVENT_BUS.register(new ClientEvents());
|
||||||
Compat.preInitClient();
|
Compat.preInitClient();
|
||||||
|
ScreenManager.registerFactory(ModContainers.ENDER_CRATE, GuiEnderCrate::new);
|
||||||
|
ScreenManager.registerFactory(ModContainers.ENDER_ACCESS, GuiEnderCrate::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -18,6 +18,7 @@ import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.FlowerBlock;
|
import net.minecraft.block.FlowerBlock;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
import net.minecraft.entity.passive.SheepEntity;
|
import net.minecraft.entity.passive.SheepEntity;
|
||||||
import net.minecraft.item.DyeColor;
|
import net.minecraft.item.DyeColor;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
|
@ -323,14 +324,16 @@ public final class ModRecipes {
|
||||||
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreCobalt", 50));
|
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreCobalt", 50));
|
||||||
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreArdite", 50));*/
|
NaturesAuraAPI.NETHER_ORES.add(new WeightedOre("oreArdite", 50));*/
|
||||||
|
|
||||||
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("egg"), 2500);
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.EGG, 2500);
|
||||||
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("snowball"), 3500);
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.SNOWBALL, 3500);
|
||||||
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("small_fireball"), 15000);
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.SMALL_FIREBALL, 15000);
|
||||||
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("ender_pearl"), 30000);
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.ENDER_PEARL, 30000);
|
||||||
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("xp_bottle"), 75000);
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.EXPERIENCE_BOTTLE, 75000);
|
||||||
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("arrow"), 10000);
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.ARROW, 10000);
|
||||||
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("shulker_bullet"), 250000);
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.SPECTRAL_ARROW, 15000);
|
||||||
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(new ResourceLocation("llama_spit"), 80000);
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.SHULKER_BULLET, 250000);
|
||||||
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.LLAMA_SPIT, 80000);
|
||||||
|
NaturesAuraAPI.PROJECTILE_GENERATIONS.put(EntityType.TRIDENT, 3000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void spawner(String name, String entity, int aura, int time, Ingredient... ings) {
|
private static void spawner(String name, String entity, int aura, int time, Ingredient... ings) {
|
||||||
|
|
|
@ -3,13 +3,17 @@ package de.ellpeck.naturesaura.reg;
|
||||||
import de.ellpeck.naturesaura.Helper;
|
import de.ellpeck.naturesaura.Helper;
|
||||||
import de.ellpeck.naturesaura.ModConfig;
|
import de.ellpeck.naturesaura.ModConfig;
|
||||||
import de.ellpeck.naturesaura.NaturesAura;
|
import de.ellpeck.naturesaura.NaturesAura;
|
||||||
|
import de.ellpeck.naturesaura.api.misc.IWorldData;
|
||||||
import de.ellpeck.naturesaura.blocks.*;
|
import de.ellpeck.naturesaura.blocks.*;
|
||||||
import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities;
|
import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities;
|
||||||
|
import de.ellpeck.naturesaura.blocks.tiles.TileEntityEnderCrate;
|
||||||
import de.ellpeck.naturesaura.entities.EntityEffectInhibitor;
|
import de.ellpeck.naturesaura.entities.EntityEffectInhibitor;
|
||||||
import de.ellpeck.naturesaura.entities.EntityMoverMinecart;
|
import de.ellpeck.naturesaura.entities.EntityMoverMinecart;
|
||||||
import de.ellpeck.naturesaura.entities.ModEntities;
|
import de.ellpeck.naturesaura.entities.ModEntities;
|
||||||
import de.ellpeck.naturesaura.entities.render.RenderEffectInhibitor;
|
import de.ellpeck.naturesaura.entities.render.RenderEffectInhibitor;
|
||||||
import de.ellpeck.naturesaura.entities.render.RenderMoverMinecart;
|
import de.ellpeck.naturesaura.entities.render.RenderMoverMinecart;
|
||||||
|
import de.ellpeck.naturesaura.gui.ContainerEnderCrate;
|
||||||
|
import de.ellpeck.naturesaura.gui.ModContainers;
|
||||||
import de.ellpeck.naturesaura.items.*;
|
import de.ellpeck.naturesaura.items.*;
|
||||||
import de.ellpeck.naturesaura.items.tools.*;
|
import de.ellpeck.naturesaura.items.tools.*;
|
||||||
import de.ellpeck.naturesaura.misc.BlockLootProvider;
|
import de.ellpeck.naturesaura.misc.BlockLootProvider;
|
||||||
|
@ -24,15 +28,19 @@ import net.minecraft.data.DataGenerator;
|
||||||
import net.minecraft.entity.EntityClassification;
|
import net.minecraft.entity.EntityClassification;
|
||||||
import net.minecraft.entity.EntityType;
|
import net.minecraft.entity.EntityType;
|
||||||
import net.minecraft.inventory.EquipmentSlotType;
|
import net.minecraft.inventory.EquipmentSlotType;
|
||||||
|
import net.minecraft.inventory.container.ContainerType;
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.potion.Effect;
|
import net.minecraft.potion.Effect;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
import net.minecraft.world.dimension.DimensionType;
|
import net.minecraft.world.dimension.DimensionType;
|
||||||
|
import net.minecraftforge.common.extensions.IForgeContainerType;
|
||||||
import net.minecraftforge.event.RegistryEvent;
|
import net.minecraftforge.event.RegistryEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
|
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
|
||||||
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -101,9 +109,9 @@ public final class ModRegistry {
|
||||||
new BlockDimensionRail("end", DimensionType.THE_END, DimensionType.OVERWORLD)
|
new BlockDimensionRail("end", DimensionType.THE_END, DimensionType.OVERWORLD)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (ModConfig.enabledFeatures.rfConverter)
|
if (ModConfig.instance.rfConverter.get())
|
||||||
event.getRegistry().register(new BlockRFConverter());
|
event.getRegistry().register(new BlockRFConverter());
|
||||||
if (ModConfig.enabledFeatures.chunkLoader)
|
if (ModConfig.instance.chunkLoader.get())
|
||||||
event.getRegistry().register(new BlockChunkLoader());
|
event.getRegistry().register(new BlockChunkLoader());
|
||||||
|
|
||||||
Helper.populateObjectHolders(ModBlocks.class, event.getRegistry());
|
Helper.populateObjectHolders(ModBlocks.class, event.getRegistry());
|
||||||
|
@ -121,11 +129,11 @@ public final class ModRegistry {
|
||||||
|
|
||||||
Item temp;
|
Item temp;
|
||||||
event.getRegistry().registerAll(
|
event.getRegistry().registerAll(
|
||||||
new Pickaxe("infused_iron_pickaxe", NAItemTier.INFUSED, 8, 3.2F),
|
new Pickaxe("infused_iron_pickaxe", NAItemTier.INFUSED, 1, -2.8F),
|
||||||
new Axe("infused_iron_axe", NAItemTier.INFUSED, 8.25F, 3.2F),
|
new Axe("infused_iron_axe", NAItemTier.INFUSED, 6.0F, -3.1F),
|
||||||
new Shovel("infused_iron_shovel", NAItemTier.INFUSED, 8.25F, 3.2F),
|
new Shovel("infused_iron_shovel", NAItemTier.INFUSED, 1.5F, -3.0F),
|
||||||
new Hoe("infused_iron_hoe", NAItemTier.INFUSED, 3.2F),
|
new Hoe("infused_iron_hoe", NAItemTier.INFUSED, -1.0F),
|
||||||
new Sword("infused_iron_sword", NAItemTier.INFUSED, 3, 3), // TODO dmg and speed values need to be changed
|
new Sword("infused_iron_sword", NAItemTier.INFUSED, 3, -2.4F),
|
||||||
new Armor("infused_iron_helmet", NAArmorMaterial.INFUSED, EquipmentSlotType.HEAD),
|
new Armor("infused_iron_helmet", NAArmorMaterial.INFUSED, EquipmentSlotType.HEAD),
|
||||||
new Armor("infused_iron_chest", NAArmorMaterial.INFUSED, EquipmentSlotType.CHEST),
|
new Armor("infused_iron_chest", NAArmorMaterial.INFUSED, EquipmentSlotType.CHEST),
|
||||||
new Armor("infused_iron_pants", NAArmorMaterial.INFUSED, EquipmentSlotType.LEGS),
|
new Armor("infused_iron_pants", NAArmorMaterial.INFUSED, EquipmentSlotType.LEGS),
|
||||||
|
@ -182,6 +190,23 @@ public final class ModRegistry {
|
||||||
Helper.populateObjectHolders(ModPotions.class, event.getRegistry());
|
Helper.populateObjectHolders(ModPotions.class, event.getRegistry());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void registerContainers(RegistryEvent.Register<ContainerType<?>> event) {
|
||||||
|
event.getRegistry().registerAll(
|
||||||
|
IForgeContainerType.create((windowId, inv, data) -> {
|
||||||
|
TileEntity tile = inv.player.world.getTileEntity(data.readBlockPos());
|
||||||
|
if (tile instanceof TileEntityEnderCrate)
|
||||||
|
return new ContainerEnderCrate(ModContainers.ENDER_CRATE, windowId, inv.player, ((TileEntityEnderCrate) tile).getItemHandler(null));
|
||||||
|
return null;
|
||||||
|
}).setRegistryName("ender_crate"),
|
||||||
|
IForgeContainerType.create((windowId, inv, data) -> {
|
||||||
|
IItemHandler handler = IWorldData.getOverworldData(inv.player.world).getEnderStorage(data.readString());
|
||||||
|
return new ContainerEnderCrate(ModContainers.ENDER_ACCESS, windowId, inv.player, handler);
|
||||||
|
}).setRegistryName("ender_access")
|
||||||
|
);
|
||||||
|
Helper.populateObjectHolders(ModContainers.class, event.getRegistry());
|
||||||
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void registerEntities(RegistryEvent.Register<EntityType<?>> event) {
|
public static void registerEntities(RegistryEvent.Register<EntityType<?>> event) {
|
||||||
event.getRegistry().registerAll(
|
event.getRegistry().registerAll(
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package de.ellpeck.naturesaura.reg;
|
package de.ellpeck.naturesaura.reg;
|
||||||
|
|
||||||
import de.ellpeck.naturesaura.NaturesAura;
|
|
||||||
import de.ellpeck.naturesaura.items.ModItems;
|
import de.ellpeck.naturesaura.items.ModItems;
|
||||||
import net.minecraft.item.IItemTier;
|
import net.minecraft.item.IItemTier;
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
|
@ -9,7 +8,7 @@ import net.minecraft.util.LazyLoadBase;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public enum NAItemTier implements IItemTier {
|
public enum NAItemTier implements IItemTier {
|
||||||
INFUSED(3, 300, 6.25F, 2.25F, 16, () -> Ingredient.fromItems(ModItems.INFUSED_IRON));
|
INFUSED(2, 250, 6.0F, 2.0F, 14, () -> Ingredient.fromItems(ModItems.INFUSED_IRON));
|
||||||
|
|
||||||
private final int harvestLevel;
|
private final int harvestLevel;
|
||||||
private final int maxUses;
|
private final int maxUses;
|
||||||
|
@ -27,26 +26,32 @@ public enum NAItemTier implements IItemTier {
|
||||||
this.repairMaterial = new LazyLoadBase<>(repairMaterialIn);
|
this.repairMaterial = new LazyLoadBase<>(repairMaterialIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getMaxUses() {
|
public int getMaxUses() {
|
||||||
return this.maxUses;
|
return this.maxUses;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public float getEfficiency() {
|
public float getEfficiency() {
|
||||||
return this.efficiency;
|
return this.efficiency;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public float getAttackDamage() {
|
public float getAttackDamage() {
|
||||||
return this.attackDamage;
|
return this.attackDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getHarvestLevel() {
|
public int getHarvestLevel() {
|
||||||
return this.harvestLevel;
|
return this.harvestLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getEnchantability() {
|
public int getEnchantability() {
|
||||||
return this.enchantability;
|
return this.enchantability;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Ingredient getRepairMaterial() {
|
public Ingredient getRepairMaterial() {
|
||||||
return this.repairMaterial.getValue();
|
return this.repairMaterial.getValue();
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
"item.naturesaura.ancient_stick": "Ancient Wood Rod",
|
"item.naturesaura.ancient_stick": "Ancient Wood Rod",
|
||||||
"item.naturesaura.aura_cache": "Aura Cache",
|
"item.naturesaura.aura_cache": "Aura Cache",
|
||||||
"item.naturesaura.color_changer": "Bucket of Infinite Color",
|
"item.naturesaura.color_changer": "Bucket of Infinite Color",
|
||||||
"item.naturesaura.book": "Book of Natural Aura",
|
"item.naturesaura.book.name": "Book of Natural Aura",
|
||||||
"item.naturesaura.shockwave_creator": "Amulet of Wrath",
|
"item.naturesaura.shockwave_creator": "Amulet of Wrath",
|
||||||
"item.naturesaura.multiblock_maker": "Multiblock Maker",
|
"item.naturesaura.multiblock_maker": "Multiblock Maker",
|
||||||
"item.naturesaura.aura_bottle.naturesaura:overworld": "Bottled Sunlight",
|
"item.naturesaura.aura_bottle.naturesaura:overworld": "Bottled Sunlight",
|
||||||
|
|
Loading…
Reference in a new issue