diff --git a/gm4/modeldata_registry.json b/gm4/modeldata_registry.json index 3de6738132..15af715ecc 100644 --- a/gm4/modeldata_registry.json +++ b/gm4/modeldata_registry.json @@ -233,11 +233,7 @@ "gm4_metallurgy:shamir/infinitas": 100 }, "command_block": { - "gm4:gui/advancement/root": 1, - "gm4_furniture:item/furniture/set_tool/cloth_set": 2, - "gm4_furniture:item/furniture/set_tool/metal_set": 3, - "gm4_furniture:item/furniture/set_tool/stone_set": 4, - "gm4_furniture:item/furniture/set_tool/wood_set": 5 + "gm4:gui/advancement/root": 1 }, "compass": { "gm4_metallurgy:shamir/sensus": 101, @@ -538,6 +534,7 @@ "fishing_rod": { "gm4_end_fishing:gui/advancement/end_fishing": 1, "gm4_end_fishing:guidebook_icon/end_fishing": 2, + "gm4_reeling_rods:guidebook_icon/reeling_rods": 3, "gm4_metallurgy:shamir/hypexperia": 110, "gm4_animi_shamir:shamir/animi": 124 }, @@ -988,33 +985,7 @@ "gm4_metallurgy:shamir/defuse": 106, "gm4_animi_shamir:shamir/animi": 124 }, - "leather_horse_armor": { - "gm4_furniture:item/furniture/paintbrush": 1, - "gm4_furniture:block/furniture/cloth_set/paper_lantern_1": 11, - "gm4_furniture:block/furniture/cloth_set/horizontal_flag_1": 16, - "gm4_furniture:block/furniture/metal_set/iron/3_candelabra_1": 18, - "gm4_furniture:block/furniture/metal_set/gold/3_candelabra_1": 30, - "gm4_furniture:block/furniture/metal_set/gold/skull_1": 31, - "gm4_furniture:block/furniture/stone_set/statues/frog": 32, - "gm4_furniture:block/furniture/stone_set/statues/bee": 33, - "gm4_furniture:block/furniture/stone_set/statues/pufferfish": 34, - "gm4_furniture:block/furniture/stone_set/statues/axolotl": 35, - "gm4_furniture:block/furniture/stone_set/statues/allay": 36, - "gm4_furniture:block/furniture/wood_set/plain/1x1_table_1": 37, - "gm4_furniture:block/furniture/wood_set/plain/2x2_table_1": 38, - "gm4_furniture:block/furniture/wood_set/plain/bench_1": 39, - "gm4_furniture:block/furniture/wood_set/plain/chair_1": 52, - "gm4_furniture:block/furniture/wood_set/plain/stool_1": 53, - "gm4_furniture:block/furniture/wood_set/plain/light_1": 59, - "gm4_furniture:block/furniture/wood_set/fancy/1x1_table_1": 60, - "gm4_furniture:block/furniture/wood_set/fancy/2x2_table_1": 62, - "gm4_furniture:block/furniture/wood_set/fancy/bench_1": 63, - "gm4_furniture:block/furniture/wood_set/fancy/chair_1": 64, - "gm4_furniture:block/furniture/wood_set/fancy/stool_1": 65, - "gm4_furniture:block/furniture/wood_set/fancy/light_1": 66, - "gm4_furniture:block/furniture/furniture_station": 67, - "gm4_furniture:block/furniture/metal_set/iron/lantern_1": 68 - }, + "leather_horse_armor": {}, "leather_leggings": { "gm4_washing_tanks:guidebook_icon/washing_tanks": 1, "gm4_weighted_armour:shamir/helious": 103, @@ -1310,14 +1281,11 @@ "gm4_heart_canisters:item/heart_canister_tier_2": 8, "gm4_scuba_gear:item/scuba_helmet": 9, "gm4_heart_canisters:guidebook_icon/heart_canisters": 10, - "gm4_furniture:block/furniture/cloth_set/paper_lantern_1": 11, "gm4_zauber_cauldrons:item/crystal/speed": 12, "gm4_zauber_cauldrons:item/crystal/regeneration": 13, "gm4_end_fishing:item/enderpuff": 14, "gm4_tinkering_compressors:gui/advancement/tinkering_compressors": 15, - "gm4_furniture:block/furniture/cloth_set/horizontal_flag_1": 16, "gm4_metallurgy:item/lump/bismutite": 17, - "gm4_furniture:block/furniture/metal_set/iron/3_candelabra_1": 18, "gm4_metallurgy:item/lump/baryte": 19, "gm4_metallurgy:item/lump/thorianite": 20, "gm4_metallurgy:item/lump/bauxite": 21, @@ -1329,16 +1297,6 @@ "gm4_relocators:item/relocator_empty": 27, "gm4_ender_hoppers:block/ender_hopper_side": 28, "gm4_ender_hoppers:block/ender_hopper_minecart": 29, - "gm4_furniture:block/furniture/metal_set/gold/3_candelabra_1": 30, - "gm4_furniture:block/furniture/metal_set/gold/skull_1": 31, - "gm4_furniture:block/furniture/stone_set/statues/frog": 32, - "gm4_furniture:block/furniture/stone_set/statues/bee": 33, - "gm4_furniture:block/furniture/stone_set/statues/pufferfish": 34, - "gm4_furniture:block/furniture/stone_set/statues/axolotl": 35, - "gm4_furniture:block/furniture/stone_set/statues/allay": 36, - "gm4_furniture:block/furniture/wood_set/plain/1x1_table_1": 37, - "gm4_furniture:block/furniture/wood_set/plain/2x2_table_1": 38, - "gm4_furniture:block/furniture/wood_set/plain/bench_1": 39, "gm4_tnt_landmines:item/tnt_landmine": 40, "gm4_tnt_landmines:item/tnt_landmine_grass": 41, "gm4_tnt_landmines:item/tnt_landmine_dirt": 42, @@ -1351,23 +1309,12 @@ "gm4_metallurgy:gui/advancement/metallurgy_blast_ore": 49, "gm4_metallurgy:gui/advancement/metallurgy_cast": 50, "gm4_relocators:gui/advancement/relocators": 51, - "gm4_furniture:block/furniture/wood_set/plain/chair_1": 52, - "gm4_furniture:block/furniture/wood_set/plain/stool_1": 53, "gm4_zauber_cauldrons:item/crystal/instant_damage": 54, "gm4_zauber_cauldrons:item/crystal/instant_health": 55, "gm4_zauber_cauldrons:item/crystal/jump_boost": 56, "gm4_zauber_cauldrons:item/crystal/poison": 57, "gm4_zauber_cauldrons:item/crystal/strength": 58, - "gm4_furniture:block/furniture/wood_set/plain/light_1": 59, - "gm4_furniture:block/furniture/wood_set/fancy/1x1_table_1": 60, "gm4_relocators:item/relocator_full": 61, - "gm4_furniture:block/furniture/wood_set/fancy/2x2_table_1": 62, - "gm4_furniture:block/furniture/wood_set/fancy/bench_1": 63, - "gm4_furniture:block/furniture/wood_set/fancy/chair_1": 64, - "gm4_furniture:block/furniture/wood_set/fancy/stool_1": 65, - "gm4_furniture:block/furniture/wood_set/fancy/light_1": 66, - "gm4_furniture:block/furniture/furniture_station": 67, - "gm4_furniture:block/furniture/metal_set/iron/lantern_1": 68, "gm4_metallurgy:shamir/infinitas": 100, "gm4_metallurgy:shamir/sensus": 101, "gm4_weighted_armour:shamir/helious": 103, diff --git a/gm4/utils.py b/gm4/utils.py index b25526c47b..8b0c9ac0cd 100644 --- a/gm4/utils.py +++ b/gm4/utils.py @@ -27,177 +27,177 @@ def run(cmd: list[str]|str) -> str: - """Run a shell command and return the stdout.""" - return subprocess.run(cmd, capture_output=True, encoding="utf8", shell=isinstance(cmd, str)).stdout.strip() + """Run a shell command and return the stdout.""" + return subprocess.run(cmd, capture_output=True, encoding="utf8", shell=isinstance(cmd, str)).stdout.strip() def X_int(val: str) -> int | None: - """Int casting that accepts character 'X' and returns None""" - return None if val.lower() == 'x' else int(val) + """Int casting that accepts character 'X' and returns None""" + return None if val.lower() == 'x' else int(val) def add_namespace(val: str, namespace: str) -> str: - """Adds a namsepace prefix to a string, if one does not already exist""" - if ":" not in val: - return f"{namespace}:{val}" - return val + """Adds a namsepace prefix to a string, if one does not already exist""" + if ":" not in val: + return f"{namespace}:{val}" + return val @dataclass @total_ordering class Version(): - """Class with methods useful for semver versions in the gm4 build pipeline""" - major: int|None - minor: int|None - patch: int|None - - def __init__(self, input: str): - self.major, self.minor, self.patch = map(X_int, input.split(".")) - - def __str__(self): - if type(None) in map(type, [self.major, self.minor, self.patch]): - warnings.warn(f"Version number was printed to string when one or more fields are not set") - return f"{self.major}.{self.minor}.{self.patch}" - - def int_rep(self) -> int: - """returns integer representation of version, for use in datapack scoreboards""" - if type(None) in map(type, [self.major, self.minor, self.patch]): - raise TypeError(f"Version number cannot be converted to integer when one or more fields are not set") - return 100_000*self.major + 1_000*self.minor + self.patch # type: ignore - - def __eq__(self, other: object) -> bool: - if other is None: - return False - elif isinstance(other, Version): - return self.major==other.major and self.minor==other.minor and self.patch==other.patch - raise TypeError - - def __lt__(self, other: object) -> bool: - if isinstance(other, Version): - if self.major is None or self.minor is None or self.patch is None \ - or other.major is None or other.minor is None or other.patch is None: - raise TypeError(f"Version numbers cannot be compared when one or more fields are not set") - if self.major < other.major: - return True - elif self.major == other.major: - if self.minor < other.minor: - return True - elif self.minor == other.minor: - if self.patch < other.patch: - return True - return False - raise TypeError - - def replace(self, **changes: Any): - params = asdict(self) | changes - params = {k:(v if v is not None else 'X') for k,v in params.items()} - return Version(f"{params['major']}.{params['minor']}.{params['patch']}") - + """Class with methods useful for semver versions in the gm4 build pipeline""" + major: int|None + minor: int|None + patch: int|None + + def __init__(self, input: str): + self.major, self.minor, self.patch = map(X_int, input.split(".")) + + def __str__(self): + if type(None) in map(type, [self.major, self.minor, self.patch]): + warnings.warn(f"Version number was printed to string when one or more fields are not set") + return f"{self.major}.{self.minor}.{self.patch}" + + def int_rep(self) -> int: + """returns integer representation of version, for use in datapack scoreboards""" + if type(None) in map(type, [self.major, self.minor, self.patch]): + raise TypeError(f"Version number cannot be converted to integer when one or more fields are not set") + return 100_000*self.major + 1_000*self.minor + self.patch # type: ignore + + def __eq__(self, other: object) -> bool: + if other is None: + return False + elif isinstance(other, Version): + return self.major==other.major and self.minor==other.minor and self.patch==other.patch + raise TypeError + + def __lt__(self, other: object) -> bool: + if isinstance(other, Version): + if self.major is None or self.minor is None or self.patch is None \ + or other.major is None or other.minor is None or other.patch is None: + raise TypeError(f"Version numbers cannot be compared when one or more fields are not set") + if self.major < other.major: + return True + elif self.major == other.major: + if self.minor < other.minor: + return True + elif self.minor == other.minor: + if self.patch < other.patch: + return True + return False + raise TypeError + + def replace(self, **changes: Any): + params = asdict(self) | changes + params = {k:(v if v is not None else 'X') for k,v in params.items()} + return Version(f"{params['major']}.{params['minor']}.{params['patch']}") + def nested_get(d: dict[str, Any], key: str) -> list[Any]: - """Recursively traverses a string-keyed dict (like minecraft json files) for the specified key, returning all that exist - returns empty list and throws no errors if key does not exist""" - ret_list: list[Any] = [] - for k, v in d.items(): - if k == key: - ret_list.append(d[k]) - elif isinstance(v, dict): - ret_list.extend(nested_get(d[k], key)) - elif isinstance(v, list): - for elem in d[k]: - if isinstance(elem, dict): - ret_list.extend(nested_get(elem, key)) #type: ignore ; NBT is hard to type due to its nested nature - return ret_list + """Recursively traverses a string-keyed dict (like minecraft json files) for the specified key, returning all that exist + returns empty list and throws no errors if key does not exist""" + ret_list: list[Any] = [] + for k, v in d.items(): + if k == key: + ret_list.append(d[k]) + elif isinstance(v, dict): + ret_list.extend(nested_get(d[k], key)) + elif isinstance(v, list): + for elem in d[k]: + if isinstance(elem, dict): + ret_list.extend(nested_get(elem, key)) #type: ignore ; NBT is hard to type due to its nested nature + return ret_list class NoneAttribute(): - """Object which returns None for any arbitrary attribute access. Used for default members""" - def __getattribute__(self, __name: str) -> None: - return None + """Object which returns None for any arbitrary attribute access. Used for default members""" + def __getattribute__(self, __name: str) -> None: + return None class MapOption(GenericModel, Generic[T]): - """A union-like type of dict and list, supporting common methods for both - - Written for use in resource_pack plugin's texture lists""" - __root__: list[T]|dict[str,T] = [] - - def entries(self) -> list[T]: - if isinstance(self.__root__, list): - return self.__root__ - return list(self.__root__.values()) - - def __getitem__(self, key: str|int) -> T: - if isinstance(key, int): - return self.entries()[key] - if isinstance(self.__root__, list): - raise KeyError(f"MapOption has no mapping data keys. Could not retrieve {key}") - return self.__root__[key] - - def items(self): - if isinstance(self.__root__, dict): - return self.__root__.items() - raise KeyError("MapOption has no mapping data keys. Can not retrieve items()") - - @validator("__root__", pre=True) # type: ignore ; v1 validator behaves strangely with type checking - def validate_root(cls, value: list[T]|dict[str,T]|T) -> list[T]|dict[str,T]: - if value is None: - value = [] - elif isinstance(value, ListOption): - value = value.entries() - if not isinstance(value, (list, tuple, dict)): # single element - value = [value] - return value # type: ignore + """A union-like type of dict and list, supporting common methods for both + - Written for use in resource_pack plugin's texture lists""" + __root__: list[T]|dict[str,T] = [] + + def entries(self) -> list[T]: + if isinstance(self.__root__, list): + return self.__root__ + return list(self.__root__.values()) + + def __getitem__(self, key: str|int) -> T: + if isinstance(key, int): + return self.entries()[key] + if isinstance(self.__root__, list): + raise KeyError(f"MapOption has no mapping data keys. Could not retrieve {key}") + return self.__root__[key] + + def items(self): + if isinstance(self.__root__, dict): + return self.__root__.items() + raise KeyError("MapOption has no mapping data keys. Can not retrieve items()") + + @validator("__root__", pre=True) # type: ignore ; v1 validator behaves strangely with type checking + def validate_root(cls, value: list[T]|dict[str,T]|T) -> list[T]|dict[str,T]: + if value is None: + value = [] + elif isinstance(value, ListOption): + value = value.entries() + if not isinstance(value, (list, tuple, dict)): # single element + value = [value] + return value # type: ignore # TODO 1.20.5: might not need this anymore class InvokeOnJsonNbt: - """Extendable mixin to run MutatingReducer's rules on nbt within advancements, loot_tables ect...""" - def __init__(self, ctx: Context): - self.ctx = ctx - raise RuntimeError("InvokeOnJsonNbt should not be directly instantiated. It is a mixin for MutatingReducers and should be interited instead") - - @contextmanager - def use_diagnostics(self, diagnostics: DiagnosticCollection) -> Iterator[None]: - """Class is mixed into MutatingReducer, who does have this method. Passed here for type completion""" - raise NotImplementedError() - - def invoke(self, node: AbstractNode, *args: Any, **kwargs: Any) -> Any: - """Class is mixed into MutatingReducer, who does have this method. Passed here for type completion""" - raise NotImplementedError() - - - @rule(AstJsonObjectEntry, key=AstJsonObjectKey(value='nbt')) - @rule(AstJsonObjectEntry, key=AstJsonObjectKey(value='tag')) - def process_nbt_in_json(self, node: AstJsonObjectEntry): - mc = self.ctx.inject(Mecha) - if isinstance(mc.database.current, (Advancement, LootTable, ItemModifier, Predicate)): - if isinstance(node.value, AstJsonValue) and isinstance(node.value.value, str) \ - and node.value.value.startswith("{") and node.value.value.endswith("}"): # excludes location check block/fluid tags - easier than making rule that checks for 'set_nbt' functions on the same json level - try: - nbt = mc.parse(node.value.value.replace("\n", "\\\\n"), type=AstNbtCompound) - except DiagnosticError as exc: - # if parsing failed, give pretty traceback - for d in exc.diagnostics.exceptions: - yield set_location(replace(d, file=mc.database.current), node.value) - return replace(node, value="{}") - - ## TEMP - trial on yielding children rather than using invoke - # with self.use_diagnostics(captured_diagnostics:=DiagnosticCollection()): - # nbt = yield nbt # run all rules on child-node - # print(captured_diagnostics.exceptions) - # print(nbt) - # new_node = replace(node, value=AstJsonValue(value=mc.serialize(nbt, type=AstNbtCompound))) - - with self.use_diagnostics(captured_diagnostics:=DiagnosticCollection()): - processed_nbt = mc.serialize(self.invoke(nbt, type=AstNbtCompound)) - for exc in captured_diagnostics.exceptions: - yield propagate_location(exc, node.value) # set error location to nbt key-value that caused the problem and pass diagnostic back to mecha - - new_node = replace(node, value=AstJsonValue(value=processed_nbt)) - if new_node != node: - return new_node - - return node + """Extendable mixin to run MutatingReducer's rules on nbt within advancements, loot_tables ect...""" + def __init__(self, ctx: Context): + self.ctx = ctx + raise RuntimeError("InvokeOnJsonNbt should not be directly instantiated. It is a mixin for MutatingReducers and should be interited instead") + + @contextmanager + def use_diagnostics(self, diagnostics: DiagnosticCollection) -> Iterator[None]: + """Class is mixed into MutatingReducer, who does have this method. Passed here for type completion""" + raise NotImplementedError() + + def invoke(self, node: AbstractNode, *args: Any, **kwargs: Any) -> Any: + """Class is mixed into MutatingReducer, who does have this method. Passed here for type completion""" + raise NotImplementedError() + + + @rule(AstJsonObjectEntry, key=AstJsonObjectKey(value='nbt')) + @rule(AstJsonObjectEntry, key=AstJsonObjectKey(value='tag')) + def process_nbt_in_json(self, node: AstJsonObjectEntry): + mc = self.ctx.inject(Mecha) + if isinstance(mc.database.current, (Advancement, LootTable, ItemModifier, Predicate)): + if isinstance(node.value, AstJsonValue) and isinstance(node.value.value, str) \ + and node.value.value.startswith("{") and node.value.value.endswith("}"): # excludes location check block/fluid tags - easier than making rule that checks for 'set_nbt' functions on the same json level + try: + nbt = mc.parse(node.value.value.replace("\n", "\\\\n"), type=AstNbtCompound) + except DiagnosticError as exc: + # if parsing failed, give pretty traceback + for d in exc.diagnostics.exceptions: + yield set_location(replace(d, file=mc.database.current), node.value) + return replace(node, value="{}") + + ## TEMP - trial on yielding children rather than using invoke + # with self.use_diagnostics(captured_diagnostics:=DiagnosticCollection()): + # nbt = yield nbt # run all rules on child-node + # print(captured_diagnostics.exceptions) + # print(nbt) + # new_node = replace(node, value=AstJsonValue(value=mc.serialize(nbt, type=AstNbtCompound))) + + with self.use_diagnostics(captured_diagnostics:=DiagnosticCollection()): + processed_nbt = mc.serialize(self.invoke(nbt, type=AstNbtCompound)) + for exc in captured_diagnostics.exceptions: + yield propagate_location(exc, node.value) # set error location to nbt key-value that caused the problem and pass diagnostic back to mecha + + new_node = replace(node, value=AstJsonValue(value=processed_nbt)) + if new_node != node: + return new_node + + return node def propagate_location(obj: T, parent_location_obj: Any) -> T: - """a set_location like function propagating diagnostic information for manually invoked rules""" - return set_location(obj, - SourceLocation(pos=parent_location_obj.location.pos+obj.location.pos, lineno=parent_location_obj.location.lineno, colno=parent_location_obj.location.colno+obj.location.colno), # type: ignore - SourceLocation(pos=parent_location_obj.location.pos+obj.end_location.pos, lineno=parent_location_obj.location.lineno, colno=parent_location_obj.location.colno+obj.end_location.colno) # type: ignore - ) + """a set_location like function propagating diagnostic information for manually invoked rules""" + return set_location(obj, + SourceLocation(pos=parent_location_obj.location.pos+obj.location.pos, lineno=parent_location_obj.location.lineno, colno=parent_location_obj.location.colno+obj.location.colno), # type: ignore + SourceLocation(pos=parent_location_obj.location.pos+obj.end_location.pos, lineno=parent_location_obj.location.lineno, colno=parent_location_obj.location.colno+obj.end_location.colno) # type: ignore + ) # CSV READING UTILS class CSVCell(str): @@ -214,7 +214,7 @@ def as_integer(self) -> int: Interprets the string contained in this CSVCell as an integer. Supported formats are: - base 10 integers (no prefix) - - prefixed hex color codes (# prefix and 6 digits) + - prefixed hex color codes (# prefix and 6 digits) - prefixed hex, octal, or binary (0x, 0o, or 0b and some amount of digits) - bool (True or False, case insensitive) Returns a integer representation of the value. @@ -232,7 +232,32 @@ def as_integer(self) -> int: if self.casefold() == 'false': return 0 return int(self) # default case, interpret as base 10 - + + def as_bool(self) -> bool: + """ + Interprets the string contained in this CSVCell as a boolean. + Returns `True` if the cell's content is: + - `TRUE` in any capitalization + - A positive number greater or equal to `1` + Returns `False` if the cell's content is: + - `FALSE` in any capitalization + - `0` or any number that truncates to zero + Raises a `ValueError` in all other cases. + """ + match self.casefold(): + case 'true': # TRUE / FALSE keywords + return True + case 'false': + return False + case other: + try: # test if contents can be parsed as a number + other = int(other) + if 0 <= other: # only positive numbers can be interpreted as a boolean + return 1 <= other + except ValueError: + pass # not a number + raise ValueError(f"Couldn't interpret CSVCell contents ('{self}') as a boolean.") + def to_color_code(self, encoding: str) -> 'CSVCell': """ Interprets the string contained in this CSVCell as a color code using the given encoding and returns a new CSVCell with that interpretation as its content. @@ -271,7 +296,7 @@ def __init__(self, column_names: List[str] | None = None, data: List[CSVCell] | f"Could not build CSVRow from supplied column names and data; Number of supplied column names ({len(column_names)}) does not match number of supplied data entries ({len(data)}).") self._data = {column_names[column_index] - : value for column_index, value in enumerate(data)} + : value for column_index, value in enumerate(data)} def __bool__(self): """ @@ -291,7 +316,7 @@ def __repr__(self) -> str: def get(self, key: str, default: str | Any) -> CSVCell: """ - Returns the value corrosponding to the key if it exists and is not the empty string. + Returns the value corresponding to the key if it exists and is not the empty string. Else returns the provided default. The provided default is cast to a string internally. """ value = self._data.get(key, CSVCell(default)) @@ -331,6 +356,7 @@ def __init__(self, column_names: List[str], rows: List[List[CSVCell]]) -> None: self._rows = rows def __iter__(self): + "Iterate over `CSVRow` objects contained within this `CSV`. Traverses in order, starting with the topmost row." self.__current = 0 self.__last = len(self._rows) return self diff --git a/gm4_blossoming_pots/pack.png b/gm4_blossoming_pots/pack.png index 05e7be4750..d10b46b991 100644 Binary files a/gm4_blossoming_pots/pack.png and b/gm4_blossoming_pots/pack.png differ diff --git a/gm4_furniture/assets/gm4_furniture/items/furniture_station.json b/gm4_furniture/assets/gm4_furniture/items/furniture_station.json new file mode 100644 index 0000000000..f4838b6275 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/furniture_station.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/furniture_station" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/gold/3_candelabra_1_lit.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/gold/3_candelabra_1_lit.json new file mode 100644 index 0000000000..7e5d670346 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/gold/3_candelabra_1_lit.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/gold/3_candelabra_1_lit", + "tints": [ + { + "type": "minecraft:dye", + "default": -393217 + } + ] + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/3_candelabra_1_lit.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/3_candelabra_1_lit.json new file mode 100644 index 0000000000..dce598ac9a --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/3_candelabra_1_lit.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/3_candelabra_1_lit", + "tints": [ + { + "type": "minecraft:dye", + "default": -393217 + } + ] + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/desk_lamp.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/desk_lamp.json new file mode 100644 index 0000000000..7cc065d183 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/desk_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/desk_lamp" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/foldable_chair.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/foldable_chair.json new file mode 100644 index 0000000000..d392ef62e4 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/foldable_chair.json @@ -0,0 +1,26 @@ +{ + "model": { + "type": "minecraft:select", + "property": "minecraft:component", + "component": "minecraft:dyed_color", + "cases": [ + { + "when": 5414081, + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/foldable_chair_gm4" + } + } + ], + "fallback": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/foldable_chair_dyeable", + "tints": [ + { + "type": "minecraft:dye", + "default": -393217 + } + ] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight.json new file mode 100644 index 0000000000..b3bf25b1d5 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight.json @@ -0,0 +1,15 @@ +{ + "model": { + "type": "minecraft:composite", + "models": [ + { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/spotlight/default/base" + }, + { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/spotlight/default/lamp" + } + ] + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/default/base.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/default/base.json new file mode 100644 index 0000000000..c6432aea99 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/default/base.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/spotlight/default/base" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/default/beam.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/default/beam.json new file mode 100644 index 0000000000..11687d9cf1 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/default/beam.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/spotlight/default/beam" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/default/lamp.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/default/lamp.json new file mode 100644 index 0000000000..796b516b3f --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/default/lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/spotlight/default/lamp" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/off/beam.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/off/beam.json new file mode 100644 index 0000000000..b831804ac7 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/off/beam.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/spotlight/off/beam" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/off/lamp.json b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/off/lamp.json new file mode 100644 index 0000000000..fb0de86336 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/metal_set/iron/spotlight/off/lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/metal_set/iron/spotlight/off/lamp" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/set_tool/cloth_set.json b/gm4_furniture/assets/gm4_furniture/items/set_tool/cloth_set.json new file mode 100644 index 0000000000..5956b6f039 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/set_tool/cloth_set.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:item/furniture/set_tool/cloth_set" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/set_tool/metal_set.json b/gm4_furniture/assets/gm4_furniture/items/set_tool/metal_set.json new file mode 100644 index 0000000000..44d424e224 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/set_tool/metal_set.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:item/furniture/set_tool/metal_set" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/set_tool/stone_set.json b/gm4_furniture/assets/gm4_furniture/items/set_tool/stone_set.json new file mode 100644 index 0000000000..b2d1a0c23a --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/set_tool/stone_set.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:item/furniture/set_tool/stone_set" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/set_tool/wood_set.json b/gm4_furniture/assets/gm4_furniture/items/set_tool/wood_set.json new file mode 100644 index 0000000000..dd5e5fb0cc --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/set_tool/wood_set.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:item/furniture/set_tool/wood_set" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/stone_set/lantern_1.json b/gm4_furniture/assets/gm4_furniture/items/stone_set/lantern_1.json new file mode 100644 index 0000000000..f5ae0b2d01 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/stone_set/lantern_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/stone_set/lantern_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/stone_set/lantern_2.json b/gm4_furniture/assets/gm4_furniture/items/stone_set/lantern_2.json new file mode 100644 index 0000000000..5b831db3e8 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/stone_set/lantern_2.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/stone_set/lantern_2" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/stone_set/lantern_big_1.json b/gm4_furniture/assets/gm4_furniture/items/stone_set/lantern_big_1.json new file mode 100644 index 0000000000..00126ea474 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/stone_set/lantern_big_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/stone_set/lantern_big_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/stone_set/statues/chicken.json b/gm4_furniture/assets/gm4_furniture/items/stone_set/statues/chicken.json new file mode 100644 index 0000000000..9f1f793792 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/stone_set/statues/chicken.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/stone_set/statues/chicken" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/stone_set/statues/slime.json b/gm4_furniture/assets/gm4_furniture/items/stone_set/statues/slime.json new file mode 100644 index 0000000000..e4823d1be3 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/stone_set/statues/slime.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/stone_set/statues/slime" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/bench_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/cherry/bench_1.json similarity index 68% rename from gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/bench_1.json rename to gm4_furniture/assets/gm4_furniture/items/wood_set/cherry/bench_1.json index d9522179fa..1c12a07e4b 100644 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/bench_1.json +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/cherry/bench_1.json @@ -1,7 +1,7 @@ { "model": { "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/fancy/bench_1", + "model": "gm4_furniture:block/furniture/wood_set/cherry/bench_1", "tints": [ { "type": "minecraft:dye", diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/chair_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/cherry/chair_1.json similarity index 68% rename from gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/chair_1.json rename to gm4_furniture/assets/gm4_furniture/items/wood_set/cherry/chair_1.json index 74c8d8c231..c36c934c0b 100644 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/chair_1.json +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/cherry/chair_1.json @@ -1,7 +1,7 @@ { "model": { "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/fancy/chair_1", + "model": "gm4_furniture:block/furniture/wood_set/cherry/chair_1", "tints": [ { "type": "minecraft:dye", diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/stool_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/cherry/stool_1.json similarity index 68% rename from gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/stool_1.json rename to gm4_furniture/assets/gm4_furniture/items/wood_set/cherry/stool_1.json index d8fad196d6..d227fab55a 100644 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/stool_1.json +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/cherry/stool_1.json @@ -1,7 +1,7 @@ { "model": { "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/fancy/stool_1", + "model": "gm4_furniture:block/furniture/wood_set/cherry/stool_1", "tints": [ { "type": "minecraft:dye", diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/1x1_table_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/1x1_table_1.json similarity index 66% rename from gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/1x1_table_1.json rename to gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/1x1_table_1.json index 8be5570f98..d0f2dcd991 100644 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/1x1_table_1.json +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/1x1_table_1.json @@ -1,7 +1,7 @@ { "model": { "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/fancy/1x1_table_1", + "model": "gm4_furniture:block/furniture/wood_set/dark_oak/1x1_table_1", "tints": [ { "type": "minecraft:dye", diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/2x2_table_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/2x2_table_1.json similarity index 66% rename from gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/2x2_table_1.json rename to gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/2x2_table_1.json index c1373569d0..4002f8786f 100644 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/2x2_table_1.json +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/2x2_table_1.json @@ -1,7 +1,7 @@ { "model": { "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/fancy/2x2_table_1", + "model": "gm4_furniture:block/furniture/wood_set/dark_oak/2x2_table_1", "tints": [ { "type": "minecraft:dye", diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/bench_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/bench_1.json new file mode 100644 index 0000000000..ab69cd0768 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/bench_1.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/dark_oak/bench_1", + "tints": [ + { + "type": "minecraft:dye", + "default": -393217 + } + ] + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/chair_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/chair_1.json new file mode 100644 index 0000000000..b82597743c --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/chair_1.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/dark_oak/chair_1", + "tints": [ + { + "type": "minecraft:dye", + "default": -393217 + } + ] + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/light_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/light_1.json similarity index 67% rename from gm4_furniture/assets/gm4_furniture/items/wood_set/plain/light_1.json rename to gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/light_1.json index 6c077188d7..8d23c96a45 100644 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/light_1.json +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/light_1.json @@ -1,7 +1,7 @@ { "model": { "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/plain/light_1", + "model": "gm4_furniture:block/furniture/wood_set/dark_oak/light_1", "tints": [ { "type": "minecraft:dye", diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/stool_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/stool_1.json new file mode 100644 index 0000000000..97df7b4f32 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/dark_oak/stool_1.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/dark_oak/stool_1", + "tints": [ + { + "type": "minecraft:dye", + "default": -393217 + } + ] + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/1x1_table_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/1x1_table_1.json new file mode 100644 index 0000000000..5ccee3b8dc --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/1x1_table_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/oak/1x1_table_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/2x2_table_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/2x2_table_1.json new file mode 100644 index 0000000000..03419872d6 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/2x2_table_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/oak/2x2_table_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/bench_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/bench_1.json new file mode 100644 index 0000000000..feebd6f44d --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/bench_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/oak/bench_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/chair_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/chair_1.json new file mode 100644 index 0000000000..cc7943b486 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/chair_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/oak/chair_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/light_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/light_1.json similarity index 68% rename from gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/light_1.json rename to gm4_furniture/assets/gm4_furniture/items/wood_set/oak/light_1.json index ca6bb75a54..8ddcbdc4e1 100644 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/fancy/light_1.json +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/light_1.json @@ -1,7 +1,7 @@ { "model": { "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/fancy/light_1", + "model": "gm4_furniture:block/furniture/wood_set/oak/light_1", "tints": [ { "type": "minecraft:dye", diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/light_1_lit.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/light_1_lit.json new file mode 100644 index 0000000000..d99c39c3ff --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/light_1_lit.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/oak/light_1_lit", + "tints": [ + { + "type": "minecraft:dye", + "default": -393217 + } + ] + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/stool_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/stool_1.json new file mode 100644 index 0000000000..7ff4822e5e --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/oak/stool_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/oak/stool_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/1x1_table_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/1x1_table_1.json deleted file mode 100644 index ba90ef425b..0000000000 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/1x1_table_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/plain/1x1_table_1" - } -} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/2x2_table_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/2x2_table_1.json deleted file mode 100644 index e835c50de4..0000000000 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/2x2_table_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/plain/2x2_table_1" - } -} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/bench_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/bench_1.json deleted file mode 100644 index 5e41f2c400..0000000000 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/bench_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/plain/bench_1" - } -} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/chair_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/chair_1.json deleted file mode 100644 index 8d3fd3fda3..0000000000 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/chair_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/plain/chair_1" - } -} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/stool_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/stool_1.json deleted file mode 100644 index ae3bc839e2..0000000000 --- a/gm4_furniture/assets/gm4_furniture/items/wood_set/plain/stool_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "gm4_furniture:block/furniture/wood_set/plain/stool_1" - } -} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/1x1_table_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/1x1_table_1.json new file mode 100644 index 0000000000..dc09301bfe --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/1x1_table_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/spruce/1x1_table_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/2x2_table_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/2x2_table_1.json new file mode 100644 index 0000000000..e47a1fd2ce --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/2x2_table_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/spruce/2x2_table_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/bench_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/bench_1.json new file mode 100644 index 0000000000..194eb33cb3 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/bench_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/spruce/bench_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/chair_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/chair_1.json new file mode 100644 index 0000000000..2d7b0d61c7 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/chair_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/spruce/chair_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/stool_1.json b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/stool_1.json new file mode 100644 index 0000000000..0a1b60dd5d --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/items/wood_set/spruce/stool_1.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "gm4_furniture:block/furniture/wood_set/spruce/stool_1" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/gold/3_candelabra_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/gold/3_candelabra_1.json index 892f1df8f0..cb2df71e98 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/gold/3_candelabra_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/gold/3_candelabra_1.json @@ -3,7 +3,7 @@ "texture_size": [32, 32], "textures": { "2": "gm4_furniture:block/furniture/misc/candle_1", - "3": "gm4_furniture:block/furniture/misc/candle_fire_1", + "3": "gm4_furniture:block/furniture/misc/candle_wick_1", "4": "gm4_furniture:block/furniture/metal_set/gold/3_candelabra_1", "particle": "gm4_furniture:block/furniture/metal_set/gold/3_candelabra_1" }, diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/gold/3_candelabra_1_lit.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/gold/3_candelabra_1_lit.json new file mode 100644 index 0000000000..892f1df8f0 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/gold/3_candelabra_1_lit.json @@ -0,0 +1,292 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "2": "gm4_furniture:block/furniture/misc/candle_1", + "3": "gm4_furniture:block/furniture/misc/candle_fire_1", + "4": "gm4_furniture:block/furniture/metal_set/gold/3_candelabra_1", + "particle": "gm4_furniture:block/furniture/metal_set/gold/3_candelabra_1" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 1, 10], + "faces": { + "north": {"uv": [12, 0, 10, 0.5], "texture": "#4"}, + "east": {"uv": [11.5, 0, 12, 2], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 1.5, 12, 2], "texture": "#4"}, + "west": {"uv": [10.5, 0, 10, 2], "rotation": 90, "texture": "#4"}, + "up": {"uv": [10, 0, 12, 2], "texture": "#4"}, + "down": {"uv": [12, 0, 10, 2], "texture": "#4"} + } + }, + { + "from": [7, 10, 7], + "to": [9, 11, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [8.5, 3, 7.5, 2.5], "texture": "#4"}, + "east": {"uv": [8.5, 2.5, 8, 3.5], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 3.5, 8.5, 3], "texture": "#4"}, + "west": {"uv": [8, 3.5, 7.5, 2.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [7.5, 3.5, 8.5, 2.5], "texture": "#4"} + } + }, + { + "from": [11, 10, 6], + "to": [15, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [9.5, 0.5, 7.5, 0], "texture": "#4"}, + "east": {"uv": [9.5, 0, 9, 2], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 2, 9.5, 1.5], "texture": "#4"}, + "west": {"uv": [7.5, 0, 8, 2], "rotation": 90, "texture": "#4"}, + "up": {"uv": [9.5, 2, 7.5, 0], "texture": "#4"}, + "down": {"uv": [7.5, 2, 9.5, 0], "texture": "#4"} + } + }, + { + "from": [12, 9, 7], + "to": [14, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [8.5, 3, 7.5, 2.5], "texture": "#4"}, + "east": {"uv": [8.5, 2.5, 8, 3.5], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 3.5, 8.5, 3], "texture": "#4"}, + "west": {"uv": [8, 3.5, 7.5, 2.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [7.5, 3.5, 8.5, 2.5], "texture": "#4"} + } + }, + { + "from": [1, 10, 6], + "to": [5, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [9.5, 0.5, 7.5, 0], "texture": "#4"}, + "east": {"uv": [9.5, 0, 9, 2], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 2, 9.5, 1.5], "texture": "#4"}, + "west": {"uv": [7.5, 0, 8, 2], "rotation": 90, "texture": "#4"}, + "up": {"uv": [9.5, 2, 7.5, 0], "texture": "#4"}, + "down": {"uv": [7.5, 2, 9.5, 0], "texture": "#4"} + } + }, + { + "from": [2, 9, 7], + "to": [4, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [8.5, 3, 7.5, 2.5], "texture": "#4"}, + "east": {"uv": [8.5, 2.5, 8, 3.5], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 3.5, 8.5, 3], "texture": "#4"}, + "west": {"uv": [8, 3.5, 7.5, 2.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [7.5, 3.5, 8.5, 2.5], "texture": "#4"} + } + }, + { + "from": [6, 11, 6], + "to": [10, 12, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [9.5, 0.5, 7.5, 0], "texture": "#4"}, + "east": {"uv": [9.5, 0, 9, 2], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 2, 9.5, 1.5], "texture": "#4"}, + "west": {"uv": [7.5, 0, 8, 2], "rotation": 90, "texture": "#4"}, + "up": {"uv": [9.5, 2, 7.5, 0], "texture": "#4"}, + "down": {"uv": [7.5, 2, 9.5, 0], "texture": "#4"} + } + }, + { + "from": [7, 1, 7], + "to": [9, 2, 9], + "faces": { + "north": {"uv": [11, 2.5, 10, 3], "texture": "#4"}, + "east": {"uv": [10.5, 2.5, 11, 3.5], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 3, 11, 3.5], "texture": "#4"}, + "west": {"uv": [10, 3.5, 10.5, 2.5], "rotation": 90, "texture": "#4"}, + "up": {"uv": [10, 2.5, 11, 3.5], "texture": "#4"} + } + }, + { + "from": [1, 2, 8], + "to": [15, 11, 8], + "faces": { + "north": {"uv": [0, 0, 7, 4.5], "texture": "#4"}, + "south": {"uv": [0, 0, 7, 4.5], "texture": "#4"} + } + }, + { + "from": [8, 2, 6], + "to": [8, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 0, 0]}, + "faces": { + "east": {"uv": [12.5, 0, 14.5, 4.5], "texture": "#4"}, + "west": {"uv": [12.5, 0, 14.5, 4.5], "texture": "#4"} + } + }, + { + "from": [6.5, 17.25, 8], + "to": [9.5, 21.25, 8], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 17.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [8, 0, 11, 4], "texture": "#3"}, + "south": {"uv": [8, 0, 11, 4], "texture": "#3"} + } + }, + { + "from": [12, 11, 7], + "to": [14, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 4, -4]}, + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [0, 6, 2, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [11.75, 10.75, 6.75], + "to": [14.25, 16.25, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [5.25, 4.25, -3.75]}, + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [6, 6, 8, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [11.5, 16.25, 8], + "to": [14.5, 20.25, 8], + "shade": false, + "rotation": {"angle": -45, "axis": "y", "origin": [13, 16.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 3, 4], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 4], "texture": "#3"} + } + }, + { + "from": [11.5, 16.25, 8], + "to": [14.5, 20.25, 8], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [13, 16.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [8, 0, 11, 4], "texture": "#3"}, + "south": {"uv": [8, 0, 11, 4], "texture": "#3"} + } + }, + { + "from": [2, 11, 7], + "to": [4, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 4, -4]}, + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [0, 6, 2, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [1.75, 10.75, 6.75], + "to": [4.25, 16.25, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-4.75, 4.25, -3.75]}, + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [6, 6, 8, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [1.5, 16.25, 8], + "to": [4.5, 20.25, 8], + "shade": false, + "rotation": {"angle": -45, "axis": "y", "origin": [3, 16.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 3, 4], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 4], "texture": "#3"} + } + }, + { + "from": [1.5, 16.25, 8], + "to": [4.5, 20.25, 8], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [3, 16.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [8, 0, 11, 4], "texture": "#3"}, + "south": {"uv": [8, 0, 11, 4], "texture": "#3"} + } + }, + { + "from": [6.5, 17.25, 8], + "to": [9.5, 21.25, 8], + "shade": false, + "rotation": {"angle": -45, "axis": "y", "origin": [8, 17.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [4, 0, 7, 4], "texture": "#3"}, + "south": {"uv": [4, 0, 7, 4], "texture": "#3"} + } + }, + { + "from": [6.75, 11.75, 6.75], + "to": [9.25, 17.25, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [0.25, 5.25, -3.75]}, + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [6, 6, 8, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [7, 12, 7], + "to": [9, 17, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 5, -4]}, + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [0, 6, 2, 8], "texture": "#2", "tintindex": 0} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/3_candelabra_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/3_candelabra_1.json index 5d74fc04d4..5e3733dc2f 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/3_candelabra_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/3_candelabra_1.json @@ -3,7 +3,7 @@ "texture_size": [32, 32], "textures": { "2": "gm4_furniture:block/furniture/misc/candle_1", - "3": "gm4_furniture:block/furniture/misc/candle_fire_1", + "3": "gm4_furniture:block/furniture/misc/candle_wick_1", "4": "gm4_furniture:block/furniture/metal_set/iron/3_candelabra_1", "particle": "gm4_furniture:block/furniture/metal_set/iron/3_candelabra_1" }, diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/3_candelabra_1_lit.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/3_candelabra_1_lit.json new file mode 100644 index 0000000000..5d74fc04d4 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/3_candelabra_1_lit.json @@ -0,0 +1,292 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "2": "gm4_furniture:block/furniture/misc/candle_1", + "3": "gm4_furniture:block/furniture/misc/candle_fire_1", + "4": "gm4_furniture:block/furniture/metal_set/iron/3_candelabra_1", + "particle": "gm4_furniture:block/furniture/metal_set/iron/3_candelabra_1" + }, + "elements": [ + { + "from": [6, 0, 6], + "to": [10, 1, 10], + "faces": { + "north": {"uv": [12, 0, 10, 0.5], "texture": "#4"}, + "east": {"uv": [11.5, 0, 12, 2], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 1.5, 12, 2], "texture": "#4"}, + "west": {"uv": [10.5, 0, 10, 2], "rotation": 90, "texture": "#4"}, + "up": {"uv": [10, 0, 12, 2], "texture": "#4"}, + "down": {"uv": [12, 0, 10, 2], "texture": "#4"} + } + }, + { + "from": [7, 10, 7], + "to": [9, 11, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [8.5, 3, 7.5, 2.5], "texture": "#4"}, + "east": {"uv": [8.5, 2.5, 8, 3.5], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 3.5, 8.5, 3], "texture": "#4"}, + "west": {"uv": [8, 3.5, 7.5, 2.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [7.5, 3.5, 8.5, 2.5], "texture": "#4"} + } + }, + { + "from": [11, 10, 6], + "to": [15, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [9.5, 0.5, 7.5, 0], "texture": "#4"}, + "east": {"uv": [9.5, 0, 9, 2], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 2, 9.5, 1.5], "texture": "#4"}, + "west": {"uv": [7.5, 0, 8, 2], "rotation": 90, "texture": "#4"}, + "up": {"uv": [9.5, 2, 7.5, 0], "texture": "#4"}, + "down": {"uv": [7.5, 2, 9.5, 0], "texture": "#4"} + } + }, + { + "from": [12, 9, 7], + "to": [14, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [8.5, 3, 7.5, 2.5], "texture": "#4"}, + "east": {"uv": [8.5, 2.5, 8, 3.5], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 3.5, 8.5, 3], "texture": "#4"}, + "west": {"uv": [8, 3.5, 7.5, 2.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [7.5, 3.5, 8.5, 2.5], "texture": "#4"} + } + }, + { + "from": [1, 10, 6], + "to": [5, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [9.5, 0.5, 7.5, 0], "texture": "#4"}, + "east": {"uv": [9.5, 0, 9, 2], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 2, 9.5, 1.5], "texture": "#4"}, + "west": {"uv": [7.5, 0, 8, 2], "rotation": 90, "texture": "#4"}, + "up": {"uv": [9.5, 2, 7.5, 0], "texture": "#4"}, + "down": {"uv": [7.5, 2, 9.5, 0], "texture": "#4"} + } + }, + { + "from": [2, 9, 7], + "to": [4, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [8.5, 3, 7.5, 2.5], "texture": "#4"}, + "east": {"uv": [8.5, 2.5, 8, 3.5], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 3.5, 8.5, 3], "texture": "#4"}, + "west": {"uv": [8, 3.5, 7.5, 2.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [7.5, 3.5, 8.5, 2.5], "texture": "#4"} + } + }, + { + "from": [6, 11, 6], + "to": [10, 12, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [9.5, 0.5, 7.5, 0], "texture": "#4"}, + "east": {"uv": [9.5, 0, 9, 2], "rotation": 90, "texture": "#4"}, + "south": {"uv": [7.5, 2, 9.5, 1.5], "texture": "#4"}, + "west": {"uv": [7.5, 0, 8, 2], "rotation": 90, "texture": "#4"}, + "up": {"uv": [9.5, 2, 7.5, 0], "texture": "#4"}, + "down": {"uv": [7.5, 2, 9.5, 0], "texture": "#4"} + } + }, + { + "from": [7, 1, 7], + "to": [9, 2, 9], + "faces": { + "north": {"uv": [11, 2.5, 10, 3], "texture": "#4"}, + "east": {"uv": [10.5, 2.5, 11, 3.5], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 3, 11, 3.5], "texture": "#4"}, + "west": {"uv": [10, 3.5, 10.5, 2.5], "rotation": 90, "texture": "#4"}, + "up": {"uv": [10, 2.5, 11, 3.5], "texture": "#4"} + } + }, + { + "from": [1, 2, 8], + "to": [15, 11, 8], + "faces": { + "north": {"uv": [0, 0, 7, 4.5], "texture": "#4"}, + "south": {"uv": [0, 0, 7, 4.5], "texture": "#4"} + } + }, + { + "from": [8, 2, 6], + "to": [8, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 0, 0]}, + "faces": { + "east": {"uv": [12.5, 0, 14.5, 4.5], "texture": "#4"}, + "west": {"uv": [12.5, 0, 14.5, 4.5], "texture": "#4"} + } + }, + { + "from": [6.5, 17.25, 8], + "to": [9.5, 21.25, 8], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 17.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [4, 0, 7, 4], "texture": "#3"}, + "south": {"uv": [4, 0, 7, 4], "texture": "#3"} + } + }, + { + "from": [12, 11, 7], + "to": [14, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 4, -4]}, + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [0, 6, 2, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [11.75, 10.75, 6.75], + "to": [14.25, 16.25, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [5.25, 4.25, -3.75]}, + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [6, 6, 8, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [11.5, 16.25, 8], + "to": [14.5, 20.25, 8], + "shade": false, + "rotation": {"angle": -45, "axis": "y", "origin": [13, 16.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [4, 0, 7, 4], "texture": "#3"}, + "south": {"uv": [4, 0, 7, 4], "texture": "#3"} + } + }, + { + "from": [11.5, 16.25, 8], + "to": [14.5, 20.25, 8], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [13, 16.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [12, 0, 15, 4], "texture": "#3"}, + "south": {"uv": [12, 0, 15, 4], "texture": "#3"} + } + }, + { + "from": [2, 11, 7], + "to": [4, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 4, -4]}, + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [0, 6, 2, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [1.75, 10.75, 6.75], + "to": [4.25, 16.25, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [-4.75, 4.25, -3.75]}, + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [6, 6, 8, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [1.5, 16.25, 8], + "to": [4.5, 20.25, 8], + "shade": false, + "rotation": {"angle": -45, "axis": "y", "origin": [3, 16.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 3, 4], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 4], "texture": "#3"} + } + }, + { + "from": [1.5, 16.25, 8], + "to": [4.5, 20.25, 8], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [3, 16.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [12, 0, 15, 4], "texture": "#3"}, + "south": {"uv": [12, 0, 15, 4], "texture": "#3"} + } + }, + { + "from": [6.5, 17.25, 8], + "to": [9.5, 21.25, 8], + "shade": false, + "rotation": {"angle": -45, "axis": "y", "origin": [8, 17.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 3, 4], "texture": "#3"}, + "south": {"uv": [0, 0, 3, 4], "texture": "#3"} + } + }, + { + "from": [6.75, 11.75, 6.75], + "to": [9.25, 17.25, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [0.25, 5.25, -3.75]}, + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [6, 0, 8, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [9, 0, 11, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [6, 6, 8, 8], "texture": "#2", "tintindex": 0} + } + }, + { + "from": [7, 12, 7], + "to": [9, 17, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 5, -4]}, + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "east": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "south": {"uv": [0, 0, 2, 5], "texture": "#2", "tintindex": 0}, + "west": {"uv": [3, 0, 5, 5], "texture": "#2", "tintindex": 0}, + "up": {"uv": [0, 6, 2, 8], "texture": "#2", "tintindex": 0} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/desk_lamp.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/desk_lamp.json new file mode 100644 index 0000000000..6f63ad26f0 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/desk_lamp.json @@ -0,0 +1,151 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "textures": { + "1": "gm4_furniture:block/furniture/metal_set/iron/desk_lamp", + "particle": "gm4_furniture:block/furniture/metal_set/iron/desk_lamp" + }, + "elements": [ + { + "name": "top", + "from": [6.5, 14.58465, 0.88542], + "to": [9.5, 16.58465, 3.88542], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 15.58465, 3.88542]}, + "faces": { + "north": {"uv": [8, 3, 11, 5], "texture": "#1"}, + "east": {"uv": [8, 3, 11, 5], "texture": "#1"}, + "south": {"uv": [8, 3, 11, 5], "texture": "#1"}, + "west": {"uv": [8, 3, 11, 5], "texture": "#1"}, + "up": {"uv": [8, 0, 11, 3], "texture": "#1"} + } + }, + { + "name": "base", + "from": [5.5, 11.58465, -0.11458], + "to": [10.5, 14.58465, 4.88542], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 15.58465, 3.88542]}, + "faces": { + "north": {"uv": [0, 11, 5, 14], "texture": "#1"}, + "east": {"uv": [0, 11, 5, 14], "texture": "#1"}, + "south": {"uv": [0, 11, 5, 14], "texture": "#1"}, + "west": {"uv": [0, 11, 5, 14], "texture": "#1"}, + "up": {"uv": [0, 6, 5, 11], "texture": "#1"} + } + }, + { + "name": "inv", + "from": [10.5, 13.58465, 4.88542], + "to": [5.5, 11.58465, -0.11458], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 15.58465, 3.88542]}, + "faces": { + "north": {"uv": [5, 13, 10, 11], "texture": "#1"}, + "east": {"uv": [5, 13, 10, 11], "texture": "#1"}, + "south": {"uv": [5, 13, 10, 11], "texture": "#1"}, + "west": {"uv": [5, 13, 10, 11], "texture": "#1"}, + "down": {"uv": [5, 6, 10, 11], "texture": "#1"} + } + }, + { + "from": [7.5, 12.08655, 3.5922], + "to": [8.5, 12.08655, 12.5922], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7.5, 13.08655, 12.5922]}, + "faces": { + "up": {"uv": [11, 0, 12, 9], "texture": "#1"}, + "down": {"uv": [11, 0, 12, 9], "texture": "#1"} + } + }, + { + "from": [7.5, 11.1636, 3.2099], + "to": [8.5, 11.1636, 12.2099], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7.5, 12.1636, 12.2099]}, + "faces": { + "up": {"uv": [11, 0, 12, 9], "texture": "#1"}, + "down": {"uv": [11, 0, 12, 9], "texture": "#1"} + } + }, + { + "from": [7.5, 2, 8], + "to": [8.5, 13, 9], + "rotation": {"angle": 22.5, "axis": "x", "origin": [7.5, 2, 8]}, + "faces": { + "north": {"uv": [12, 0, 13, 11], "texture": "#1"}, + "east": {"uv": [12, 0, 13, 11], "texture": "#1"}, + "south": {"uv": [12, 0, 13, 11], "texture": "#1"}, + "west": {"uv": [12, 0, 13, 11], "texture": "#1"}, + "up": {"uv": [12, 0, 13, 1], "texture": "#1"}, + "down": {"uv": [12, 10, 13, 11], "texture": "#1"} + } + }, + { + "name": "base", + "from": [6, 0, 6], + "to": [10, 2, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 0, 5]}, + "faces": { + "north": {"uv": [0, 4, 4, 6], "texture": "#1"}, + "east": {"uv": [0, 4, 4, 6], "texture": "#1"}, + "south": {"uv": [0, 4, 4, 6], "texture": "#1"}, + "west": {"uv": [0, 4, 4, 6], "texture": "#1"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#1"}, + "down": {"uv": [4, 0, 8, 4], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "lamp", + "origin": [8, 8, 8], + "color": 0, + "children": [ + { + "name": "head", + "origin": [0.5, 7.98951, -5.02928], + "color": 0, + "children": [0, 1, 2] + }, + { + "name": "arm", + "origin": [8, 8, 8], + "color": 0, + "children": [3, 4, 5] + }, + 6 + ] + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 2], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 2], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 3.25, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [0, 3.25, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/foldable_chair_dyeable.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/foldable_chair_dyeable.json new file mode 100644 index 0000000000..afd9254812 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/foldable_chair_dyeable.json @@ -0,0 +1,155 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/metal_set/iron/foldable_chair", + "particle": "gm4_furniture:block/furniture/metal_set/iron/foldable_chair" + }, + "elements": [ + { + "from": [10, 10, 3], + "to": [13, 10, 13], + "rotation": {"angle": 22.5, "axis": "z", "origin": [13, 10.001, 2]}, + "faces": { + "up": {"uv": [7.5, 5, 6, 0], "texture": "#0", "tintindex": 0}, + "down": {"uv": [7.5, 0, 6, 5], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [5.75336, 8.85195, 3], + "to": [10.22836, 8.85195, 13], + "rotation": {"angle": 0, "axis": "z", "origin": [11.22836, 8.85295, 2]}, + "faces": { + "up": {"uv": [9.5, 5, 7.5, 0], "texture": "#0", "tintindex": 0}, + "down": {"uv": [9.5, 0, 7.5, 5], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [3, 10, 3], + "to": [6, 10, 13], + "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10.001, 2]}, + "faces": { + "up": {"uv": [11, 5, 9.5, 0], "texture": "#0", "tintindex": 0}, + "down": {"uv": [11, 0, 9.5, 5], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [12.08579, -3, 3], + "to": [13.08579, 11, 13], + "rotation": {"angle": -45, "axis": "z", "origin": [12.08579, 10, 13]}, + "faces": { + "north": {"uv": [0.5, 0.5, 0, 7.5], "texture": "#0"}, + "east": {"uv": [5.5, 0.5, 0.5, 7.5], "texture": "#0"}, + "south": {"uv": [6, 0.5, 5.5, 7.5], "texture": "#0"}, + "up": {"uv": [0.5, 0, 5.5, 0.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0.5, 7.5, 5.5, 8], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [21.98528, 6.48528, 13], + "to": [20.98528, -7.51472, 3], + "rotation": {"angle": -45, "axis": "z", "origin": [21.98528, 18.48528, 23]}, + "faces": { + "north": {"uv": [6, 7.5, 5.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 7.5, 0, 0.5], "texture": "#0"}, + "west": {"uv": [5.5, 7.5, 0.5, 0.5], "texture": "#0"}, + "up": {"uv": [5.5, 7.5, 0.5, 8], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0.5, 0, 5.5, 0.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [12.5, 10, 12.025], + "to": [13.5, 19, 13.025], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5, 10, 12.025]}, + "faces": { + "north": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "east": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "south": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "west": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "up": {"uv": [0, 8.5, 0.5, 9], "texture": "#0"}, + "down": {"uv": [0, 12.5, 0.5, 13], "texture": "#0"} + } + }, + { + "from": [2.5, 10, 12.025], + "to": [3.5, 19, 13.025], + "rotation": {"angle": 0, "axis": "y", "origin": [-7.5, 10, 12.025]}, + "faces": { + "north": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "east": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "south": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "west": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "up": {"uv": [0, 8.5, 0.5, 9], "texture": "#0"}, + "down": {"uv": [0, 12.5, 0.5, 13], "texture": "#0"} + } + }, + { + "from": [3.5, 11, 12.5], + "to": [12.5, 18, 12.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-6.5, 10, 11.5]}, + "faces": { + "north": {"uv": [11, 0, 15.5, 3.5], "texture": "#0", "tintindex": 0}, + "south": {"uv": [11, 0, 15.5, 3.5], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [2.91421, -3, 2.975], + "to": [3.91421, 11, 12.975], + "rotation": {"angle": 45, "axis": "z", "origin": [3.91421, 10, 12.975]}, + "faces": { + "north": {"uv": [0, 0.5, 0.5, 7.5], "texture": "#0"}, + "south": {"uv": [5.5, 0.5, 6, 7.5], "texture": "#0"}, + "west": {"uv": [0.5, 0.5, 5.5, 7.5], "texture": "#0"}, + "up": {"uv": [0.5, 0.5, 5.5, 0], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0.5, 8, 5.5, 7.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-4.98528, 6.48528, 12.975], + "to": [-5.98528, -7.51472, 2.975], + "rotation": {"angle": 45, "axis": "z", "origin": [-5.98528, 18.48528, 22.975]}, + "faces": { + "north": {"uv": [5.5, 7.5, 6, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 7.5, 5.5, 0.5], "texture": "#0"}, + "south": {"uv": [0, 7.5, 0.5, 0.5], "texture": "#0"}, + "up": {"uv": [5.5, 8, 0.5, 7.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0.5, 0.5, 5.5, 0], "rotation": 90, "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, -1.75, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/foldable_chair_gm4.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/foldable_chair_gm4.json new file mode 100644 index 0000000000..d94296da28 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/foldable_chair_gm4.json @@ -0,0 +1,155 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/metal_set/iron/foldable_chair_gm4", + "particle": "gm4_furniture:block/furniture/metal_set/iron/foldable_chair_gm4" + }, + "elements": [ + { + "from": [10, 10, 3], + "to": [13, 10, 13], + "rotation": {"angle": 22.5, "axis": "z", "origin": [13, 10.001, 2]}, + "faces": { + "up": {"uv": [7.5, 5, 6, 0], "texture": "#0", "tintindex": 0}, + "down": {"uv": [7.5, 0, 6, 5], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [5.75336, 8.85195, 3], + "to": [10.22836, 8.85195, 13], + "rotation": {"angle": 0, "axis": "z", "origin": [11.22836, 8.85295, 2]}, + "faces": { + "up": {"uv": [9.5, 5, 7.5, 0], "texture": "#0", "tintindex": 0}, + "down": {"uv": [9.5, 0, 7.5, 5], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [3, 10, 3], + "to": [6, 10, 13], + "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10.001, 2]}, + "faces": { + "up": {"uv": [11, 5, 9.5, 0], "texture": "#0", "tintindex": 0}, + "down": {"uv": [11, 0, 9.5, 5], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [12.08579, -3, 3], + "to": [13.08579, 11, 13], + "rotation": {"angle": -45, "axis": "z", "origin": [12.08579, 10, 13]}, + "faces": { + "north": {"uv": [0.5, 0.5, 0, 7.5], "texture": "#0"}, + "east": {"uv": [5.5, 0.5, 0.5, 7.5], "texture": "#0"}, + "south": {"uv": [6, 0.5, 5.5, 7.5], "texture": "#0"}, + "up": {"uv": [0.5, 0, 5.5, 0.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0.5, 7.5, 5.5, 8], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [21.98528, 6.48528, 13], + "to": [20.98528, -7.51472, 3], + "rotation": {"angle": -45, "axis": "z", "origin": [21.98528, 18.48528, 23]}, + "faces": { + "north": {"uv": [6, 7.5, 5.5, 0.5], "texture": "#0"}, + "south": {"uv": [0.5, 7.5, 0, 0.5], "texture": "#0"}, + "west": {"uv": [5.5, 7.5, 0.5, 0.5], "texture": "#0"}, + "up": {"uv": [5.5, 7.5, 0.5, 8], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0.5, 0, 5.5, 0.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [12.5, 10, 12.025], + "to": [13.5, 19, 13.025], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5, 10, 12.025]}, + "faces": { + "north": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "east": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "south": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "west": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "up": {"uv": [0, 8.5, 0.5, 9], "texture": "#0"}, + "down": {"uv": [0, 12.5, 0.5, 13], "texture": "#0"} + } + }, + { + "from": [2.5, 10, 12.025], + "to": [3.5, 19, 13.025], + "rotation": {"angle": 0, "axis": "y", "origin": [-7.5, 10, 12.025]}, + "faces": { + "north": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "east": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "south": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "west": {"uv": [0, 8.5, 0.5, 13], "texture": "#0"}, + "up": {"uv": [0, 8.5, 0.5, 9], "texture": "#0"}, + "down": {"uv": [0, 12.5, 0.5, 13], "texture": "#0"} + } + }, + { + "from": [3.5, 11, 12.5], + "to": [12.5, 18, 12.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-6.5, 10, 11.5]}, + "faces": { + "north": {"uv": [11, 0, 15.5, 3.5], "texture": "#0", "tintindex": 0}, + "south": {"uv": [11, 0, 15.5, 3.5], "texture": "#0", "tintindex": 0} + } + }, + { + "from": [2.91421, -3, 2.975], + "to": [3.91421, 11, 12.975], + "rotation": {"angle": 45, "axis": "z", "origin": [3.91421, 10, 12.975]}, + "faces": { + "north": {"uv": [0, 0.5, 0.5, 7.5], "texture": "#0"}, + "south": {"uv": [5.5, 0.5, 6, 7.5], "texture": "#0"}, + "west": {"uv": [0.5, 0.5, 5.5, 7.5], "texture": "#0"}, + "up": {"uv": [0.5, 0.5, 5.5, 0], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0.5, 8, 5.5, 7.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-4.98528, 6.48528, 12.975], + "to": [-5.98528, -7.51472, 2.975], + "rotation": {"angle": 45, "axis": "z", "origin": [-5.98528, 18.48528, 22.975]}, + "faces": { + "north": {"uv": [5.5, 7.5, 6, 0.5], "texture": "#0"}, + "east": {"uv": [0.5, 7.5, 5.5, 0.5], "texture": "#0"}, + "south": {"uv": [0, 7.5, 0.5, 0.5], "texture": "#0"}, + "up": {"uv": [5.5, 8, 0.5, 7.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0.5, 0.5, 5.5, 0], "rotation": 90, "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, -1.75, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/default/base.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/default/base.json new file mode 100644 index 0000000000..33e4a2c55a --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/default/base.json @@ -0,0 +1,73 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "textures": { + "0": "gm4_furniture:block/furniture/metal_set/iron/spotlight" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 1, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [3, -3, 8]}, + "faces": { + "north": {"uv": [2.5, 2, 4.5, 2.25], "texture": "#0"}, + "east": {"uv": [2.5, 2, 4.5, 2.25], "texture": "#0"}, + "south": {"uv": [2.5, 2, 4.5, 2.25], "texture": "#0"}, + "west": {"uv": [2.5, 2, 4.5, 2.25], "texture": "#0"}, + "up": {"uv": [4.5, 2, 2.5, 0], "texture": "#0"}, + "down": {"uv": [6.5, 0, 4.5, 2], "texture": "#0"} + } + }, + { + "from": [6, 1, 6], + "to": [10, 8, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3, -2, 8]}, + "faces": { + "north": {"uv": [2.5, 3.25, 3.5, 5], "texture": "#0"}, + "east": {"uv": [2.5, 3.25, 3.5, 5], "texture": "#0"}, + "south": {"uv": [2.5, 3.25, 3.5, 5], "texture": "#0"}, + "west": {"uv": [2.5, 3.25, 3.5, 5], "texture": "#0"}, + "up": {"uv": [3.5, 3.25, 2.5, 2.25], "texture": "#0"}, + "down": {"uv": [4.5, 2.25, 3.5, 3.25], "texture": "#0"} + } + } + ], + "display": { + "head": { + "rotation": [0, -180, 0] + }, + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 2], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 2], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 3.25, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [0, 3.25, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/default/beam.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/default/beam.json new file mode 100644 index 0000000000..74740b6907 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/default/beam.json @@ -0,0 +1,37 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "textures": { + "0": "gm4_furniture:block/furniture/metal_set/iron/spotlight", + "particle": "gm4_furniture:block/furniture/metal_set/iron/spotlight" + }, + "elements": [ + { + "from": [8.75, 19, 8.75], + "to": [7.25, 7, 7.25], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 31, 8]}, + "faces": { + "north": {"uv": [12, 16, 14, 0], "texture": "#0"}, + "east": {"uv": [12, 16, 14, 0], "texture": "#0"}, + "south": {"uv": [12, 16, 14, 0], "texture": "#0"}, + "west": {"uv": [12, 16, 14, 0], "texture": "#0"} + } + }, + { + "from": [8.75, 31, 8.75], + "to": [7.25, 19, 7.25], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 43, 8]}, + "faces": { + "north": {"uv": [14, 16, 16, 0], "texture": "#0"}, + "east": {"uv": [14, 16, 16, 0], "texture": "#0"}, + "south": {"uv": [14, 16, 16, 0], "texture": "#0"}, + "west": {"uv": [14, 16, 16, 0], "texture": "#0"} + } + } + ], + "display": { + "head": { + "rotation": [0, -180, 0] + } + } +} \ No newline at end of file diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/default/lamp.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/default/lamp.json new file mode 100644 index 0000000000..e8b7c20eb6 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/default/lamp.json @@ -0,0 +1,60 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "textures": { + "0": "gm4_furniture:block/furniture/metal_set/iron/spotlight" + }, + "elements": [ + { + "from": [3, 2, 3], + "to": [13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [0, 2.5, 2.5, 5.5], "texture": "#0"}, + "east": {"uv": [0, 2.5, 2.5, 5.5], "texture": "#0"}, + "south": {"uv": [0, 2.5, 2.5, 5.5], "texture": "#0"}, + "west": {"uv": [0, 2.5, 2.5, 5.5], "texture": "#0"}, + "up": {"uv": [2.5, 2.5, 0, 0], "texture": "#0"}, + "down": {"uv": [2.5, 5.5, 0, 8], "texture": "#0"} + } + } + ], + "display": { + "head": { + "rotation": [0, -180, 0] + }, + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 2], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 2], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 3.25, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [0, 3.25, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/off/beam.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/off/beam.json new file mode 100644 index 0000000000..83dcacb28c --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/off/beam.json @@ -0,0 +1,7 @@ +{ + "parent":"gm4_furniture:block/furniture/metal_set/iron/spotlight/default/beam", + "textures":{ + "0":"gm4_furniture:block/furniture/metal_set/iron/spotlight_off", + "particle": "gm4_furniture:block/furniture/metal_set/iron/spotlight_off" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/off/lamp.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/off/lamp.json new file mode 100644 index 0000000000..2873212c78 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/metal_set/iron/spotlight/off/lamp.json @@ -0,0 +1,7 @@ +{ + "parent":"gm4_furniture:block/furniture/metal_set/iron/spotlight/default/lamp", + "textures":{ + "0":"gm4_furniture:block/furniture/metal_set/iron/spotlight_off", + "particle": "gm4_furniture:block/furniture/metal_set/iron/spotlight_off" + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/lantern_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/lantern_1.json new file mode 100644 index 0000000000..ada21654b3 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/lantern_1.json @@ -0,0 +1,114 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/stone_set/lantern", + "particle": "gm4_furniture:block/furniture/stone_set/lantern" + }, + "elements": [ + { + "from": [4, 0, 4], + "to": [12, 2, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 0, 6]}, + "faces": { + "north": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "east": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "south": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "west": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "up": {"uv": [4, 0, 8, 4], "texture": "#0"}, + "down": {"uv": [4, 5, 8, 9], "texture": "#0"} + } + }, + { + "from": [5, 2, 5], + "to": [11, 7, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 2, 6]}, + "faces": { + "north": {"uv": [5, 9, 8, 11.5], "texture": "#0"}, + "east": {"uv": [5, 9, 8, 11.5], "texture": "#0"}, + "south": {"uv": [5, 9, 8, 11.5], "texture": "#0"}, + "west": {"uv": [5, 9, 8, 11.5], "texture": "#0"} + } + }, + { + "from": [3, 7, 3], + "to": [13, 9, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 7, 6]}, + "faces": { + "north": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "east": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "south": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "west": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "up": {"uv": [8, 0, 13, 5], "texture": "#0"}, + "down": {"uv": [8, 6, 13, 11], "texture": "#0"} + } + }, + { + "from": [6, 9, 6], + "to": [10, 13, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 9, 6]}, + "faces": { + "north": {"uv": [3, 11, 5, 13], "texture": "#0"}, + "east": {"uv": [5, 11, 3, 13], "texture": "#0"}, + "south": {"uv": [3, 11, 5, 13], "texture": "#0"}, + "west": {"uv": [5, 11, 3, 13], "texture": "#0"}, + "up": {"uv": [3, 9, 5, 11], "texture": "#0"} + } + }, + { + "from": [11, 7, 11], + "to": [5, 2, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 7, 12]}, + "faces": { + "north": {"uv": [5, 14, 8, 11.5], "texture": "#0"}, + "east": {"uv": [5, 14, 8, 11.5], "texture": "#0"}, + "south": {"uv": [5, 14, 8, 11.5], "texture": "#0"}, + "west": {"uv": [5, 14, 8, 11.5], "texture": "#0"} + } + }, + { + "from": [7, 10, 7], + "to": [9, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 10, 7]}, + "faces": { + "north": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "east": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "south": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "west": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "up": {"uv": [8, 11, 9, 12], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/lantern_2.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/lantern_2.json new file mode 100644 index 0000000000..535d2e5905 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/lantern_2.json @@ -0,0 +1,150 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/stone_set/lantern", + "particle": "gm4_furniture:block/furniture/stone_set/lantern" + }, + "elements": [ + { + "from": [4, 8, 4], + "to": [12, 10, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 6]}, + "faces": { + "north": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "east": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "south": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "west": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "up": {"uv": [4, 0, 8, 4], "texture": "#0"}, + "down": {"uv": [4, 5, 8, 9], "texture": "#0"} + } + }, + { + "from": [5, 10, 5], + "to": [11, 15, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 10, 6]}, + "faces": { + "north": {"uv": [5, 9, 8, 11.5], "texture": "#0"}, + "east": {"uv": [5, 9, 8, 11.5], "texture": "#0"}, + "south": {"uv": [5, 9, 8, 11.5], "texture": "#0"}, + "west": {"uv": [5, 9, 8, 11.5], "texture": "#0"} + } + }, + { + "from": [4, 0, 4], + "to": [12, 2, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 0, 6]}, + "faces": { + "north": {"uv": [0, 4, 4, 5], "texture": "#0"}, + "east": {"uv": [0, 4, 4, 5], "texture": "#0"}, + "south": {"uv": [0, 4, 4, 5], "texture": "#0"}, + "west": {"uv": [0, 4, 4, 5], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "down": {"uv": [0, 5, 4, 9], "texture": "#0"} + } + }, + { + "from": [5, 2, 5], + "to": [11, 8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 2, 6]}, + "faces": { + "north": {"uv": [0, 9, 3, 12], "texture": "#0"}, + "east": {"uv": [0, 9, 3, 12], "texture": "#0"}, + "south": {"uv": [0, 9, 3, 12], "texture": "#0"}, + "west": {"uv": [0, 9, 3, 12], "texture": "#0"} + } + }, + { + "from": [3, 15, 3], + "to": [13, 17, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 15, 6]}, + "faces": { + "north": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "east": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "south": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "west": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "up": {"uv": [8, 0, 13, 5], "texture": "#0"}, + "down": {"uv": [8, 6, 13, 11], "texture": "#0"} + } + }, + { + "from": [6, 18, 6], + "to": [10, 22, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 18, 6]}, + "faces": { + "north": {"uv": [3, 11, 5, 13], "texture": "#0"}, + "east": {"uv": [5, 11, 3, 13], "texture": "#0"}, + "south": {"uv": [3, 11, 5, 13], "texture": "#0"}, + "west": {"uv": [5, 11, 3, 13], "texture": "#0"}, + "up": {"uv": [3, 9, 5, 11], "texture": "#0"}, + "down": {"uv": [3, 13, 5, 15], "texture": "#0"} + } + }, + { + "from": [7, 17, 7], + "to": [9, 18, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 17, 6]}, + "faces": { + "north": {"uv": [0, 12, 1, 12.5], "texture": "#0"}, + "east": {"uv": [0, 12, 1, 12.5], "texture": "#0"}, + "south": {"uv": [0, 12, 1, 12.5], "texture": "#0"}, + "west": {"uv": [0, 12, 1, 12.5], "texture": "#0"} + } + }, + { + "from": [11, 15, 11], + "to": [5, 10, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 15, 12]}, + "faces": { + "north": {"uv": [5, 14, 8, 11.5], "texture": "#0"}, + "east": {"uv": [5, 14, 8, 11.5], "texture": "#0"}, + "south": {"uv": [5, 14, 8, 11.5], "texture": "#0"}, + "west": {"uv": [5, 14, 8, 11.5], "texture": "#0"} + } + }, + { + "from": [7, 10, 7], + "to": [9, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 10, 7]}, + "faces": { + "north": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "east": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "south": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "west": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "up": {"uv": [8, 11, 9, 12], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/lantern_big_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/lantern_big_1.json new file mode 100644 index 0000000000..5ecda19c92 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/lantern_big_1.json @@ -0,0 +1,154 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/stone_set/lantern_big", + "particle": "gm4_furniture:block/furniture/stone_set/lantern_big" + }, + "elements": [ + { + "from": [4, 12, 4], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 12, 6]}, + "faces": { + "north": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "east": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "south": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "west": {"uv": [4, 4, 8, 5], "texture": "#0"}, + "up": {"uv": [4, 0, 8, 4], "texture": "#0"}, + "down": {"uv": [4, 5, 8, 9], "texture": "#0"} + } + }, + { + "from": [5, 14, 5], + "to": [11, 19, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 14, 6]}, + "faces": { + "north": {"uv": [5, 9, 8, 11.5], "texture": "#0"}, + "east": {"uv": [5, 9, 8, 11.5], "texture": "#0"}, + "south": {"uv": [5, 9, 8, 11.5], "texture": "#0"}, + "west": {"uv": [5, 9, 8, 11.5], "texture": "#0"} + } + }, + { + "from": [4, 4, 4], + "to": [12, 6, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 6]}, + "faces": { + "north": {"uv": [0, 4, 4, 5], "texture": "#0"}, + "east": {"uv": [0, 4, 4, 5], "texture": "#0"}, + "south": {"uv": [0, 4, 4, 5], "texture": "#0"}, + "west": {"uv": [0, 4, 4, 5], "texture": "#0"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#0"}, + "down": {"uv": [0, 5, 4, 9], "texture": "#0"} + } + }, + { + "from": [5, 6, 5], + "to": [11, 12, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 6, 6]}, + "faces": { + "north": {"uv": [0, 9, 3, 12], "texture": "#0"}, + "east": {"uv": [0, 9, 3, 12], "texture": "#0"}, + "south": {"uv": [0, 9, 3, 12], "texture": "#0"}, + "west": {"uv": [0, 9, 3, 12], "texture": "#0"} + } + }, + { + "from": [3, 19, 3], + "to": [13, 21, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 19, 6]}, + "faces": { + "north": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "east": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "south": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "west": {"uv": [8, 5, 13, 6], "texture": "#0"}, + "up": {"uv": [8, 0, 13, 5], "texture": "#0"}, + "down": {"uv": [8, 6, 13, 11], "texture": "#0"} + } + }, + { + "from": [6, 22, 6], + "to": [10, 26, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 22, 6]}, + "faces": { + "north": {"uv": [3, 11, 5, 13], "texture": "#0"}, + "east": {"uv": [5, 11, 3, 13], "texture": "#0"}, + "south": {"uv": [3, 11, 5, 13], "texture": "#0"}, + "west": {"uv": [5, 11, 3, 13], "texture": "#0"}, + "up": {"uv": [3, 9, 5, 11], "texture": "#0"}, + "down": {"uv": [3, 13, 5, 15], "texture": "#0"} + } + }, + { + "from": [7, 21, 7], + "to": [9, 22, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 21, 6]}, + "faces": { + "north": {"uv": [0, 12, 1, 12.5], "texture": "#0"}, + "east": {"uv": [0, 12, 1, 12.5], "texture": "#0"}, + "south": {"uv": [0, 12, 1, 12.5], "texture": "#0"}, + "west": {"uv": [0, 12, 1, 12.5], "texture": "#0"} + } + }, + { + "from": [11, 19, 11], + "to": [5, 14, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 19, 12]}, + "faces": { + "north": {"uv": [5, 14, 8, 11.5], "texture": "#0"}, + "east": {"uv": [5, 14, 8, 11.5], "texture": "#0"}, + "south": {"uv": [5, 14, 8, 11.5], "texture": "#0"}, + "west": {"uv": [5, 14, 8, 11.5], "texture": "#0"} + } + }, + { + "from": [7, 14, 7], + "to": [9, 18, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 14, 7]}, + "faces": { + "north": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "east": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "south": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "west": {"uv": [8, 12, 9, 14], "texture": "#0"}, + "up": {"uv": [8, 11, 9, 12], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 0, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 0, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, -2.5, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "translation": [0, -2.5, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 0.5, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, -2.5, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "translation": [0, -2.5, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/statues/chicken.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/statues/chicken.json new file mode 100644 index 0000000000..2b8ee5c186 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/statues/chicken.json @@ -0,0 +1,189 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "gm4_furniture:block/furniture/stone_set/statues/stone_statue_base_1", + "1": "gm4_furniture:block/furniture/stone_set/statues/chicken", + "particle": "gm4_furniture:block/furniture/stone_set/statues/stone_statue_base_1" + }, + "elements": [ + { + "from": [2, 4, 2], + "to": [14, 6, 14], + "faces": { + "north": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "east": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "south": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "west": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "up": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "down": {"uv": [0, 8, 6, 14], "texture": "#0"} + } + }, + { + "from": [3, 2, 3], + "to": [13, 4, 13], + "faces": { + "north": {"uv": [0, 14.5, 5, 15.5], "texture": "#0"}, + "east": {"uv": [0, 14.5, 5, 15.5], "texture": "#0"}, + "south": {"uv": [0, 14.5, 5, 15.5], "texture": "#0"}, + "west": {"uv": [0, 14.5, 5, 15.5], "texture": "#0"} + } + }, + { + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [6.5, 6.5, 12.5, 7.5], "texture": "#0"}, + "east": {"uv": [6.5, 6.5, 12.5, 7.5], "texture": "#0"}, + "south": {"uv": [6.5, 6.5, 12.5, 7.5], "texture": "#0"}, + "west": {"uv": [6.5, 6.5, 12.5, 7.5], "texture": "#0"}, + "up": {"uv": [6.5, 0, 12.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 8, 12.5, 14], "texture": "#0"} + } + }, + { + "name": "base", + "from": [5, 11, 5], + "to": [11, 17, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 11, 5]}, + "faces": { + "north": {"uv": [0, 3.5, 1.5, 5], "texture": "#1"}, + "east": {"uv": [0, 0, 2, 1.5], "texture": "#1"}, + "south": {"uv": [4, 0, 5.5, 1.5], "texture": "#1"}, + "west": {"uv": [0, 1.75, 2, 3.25], "texture": "#1"}, + "up": {"uv": [3.75, 2, 2.25, 0], "texture": "#1"}, + "down": {"uv": [3.75, 2.25, 2.25, 4.25], "texture": "#1"} + } + }, + { + "name": "wing_right", + "from": [4, 13, 6], + "to": [5, 17, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 13, 6]}, + "faces": { + "north": {"uv": [7, 6, 7.25, 7], "texture": "#1"}, + "east": {"uv": [4, 1.75, 5.5, 2.75], "texture": "#1"}, + "south": {"uv": [7.25, 1, 7.5, 2], "texture": "#1"}, + "west": {"uv": [4, 3, 5.5, 4], "texture": "#1"}, + "up": {"uv": [6.25, 8, 6, 6.5], "texture": "#1"}, + "down": {"uv": [6.75, 6, 6.5, 7.5], "texture": "#1"} + } + }, + { + "name": "wing_left", + "from": [11, 13, 6], + "to": [12, 17, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 13, 6]}, + "faces": { + "north": {"uv": [3.25, 7.25, 3.5, 8.25], "texture": "#1"}, + "east": {"uv": [4, 4.25, 5.5, 5.25], "texture": "#1"}, + "south": {"uv": [3.75, 7.25, 4, 8.25], "texture": "#1"}, + "west": {"uv": [1.75, 4.5, 3.25, 5.5], "texture": "#1"}, + "up": {"uv": [7, 2.5, 6.75, 1], "texture": "#1"}, + "down": {"uv": [2.5, 6.75, 2.25, 8.25], "texture": "#1"} + } + }, + { + "name": "chicken_head", + "from": [6, 15, 3], + "to": [10, 21, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 15, 3]}, + "faces": { + "north": {"uv": [0, 5.25, 1, 6.75], "texture": "#1"}, + "east": {"uv": [5.75, 1, 6.5, 2.5], "texture": "#1"}, + "south": {"uv": [3.5, 5.5, 4.5, 7], "texture": "#1"}, + "west": {"uv": [1.25, 5.75, 2, 7.25], "texture": "#1"}, + "up": {"uv": [3.25, 6.5, 2.25, 5.75], "texture": "#1"}, + "down": {"uv": [6.75, 2.75, 5.75, 3.5], "texture": "#1"} + } + }, + { + "name": "beak", + "from": [6, 17, 1], + "to": [10, 19, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 1]}, + "faces": { + "north": {"uv": [5.75, 3.75, 6.75, 4.25], "texture": "#1"}, + "east": {"uv": [7, 4.25, 7.5, 4.75], "texture": "#1"}, + "south": {"uv": [5.75, 4.5, 6.75, 5], "texture": "#1"}, + "west": {"uv": [4.25, 7.25, 4.75, 7.75], "texture": "#1"}, + "up": {"uv": [5.75, 7, 4.75, 6.5], "texture": "#1"}, + "down": {"uv": [7.5, 5.25, 6.5, 5.75], "texture": "#1"} + } + }, + { + "name": "red", + "from": [7, 15, 2], + "to": [9, 17, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 15, 2]}, + "faces": { + "north": {"uv": [5, 7.25, 5.5, 7.75], "texture": "#1"}, + "east": {"uv": [1.75, 3.5, 2, 4], "texture": "#1"}, + "south": {"uv": [7, 7.25, 7.5, 7.75], "texture": "#1"}, + "west": {"uv": [3.5, 4.5, 3.75, 5], "texture": "#1"}, + "up": {"uv": [7.75, 2.5, 7.25, 2.25], "texture": "#1"}, + "down": {"uv": [8, 0, 7.5, 0.25], "texture": "#1"} + } + }, + { + "name": "left_leg", + "from": [6, 6.1, 10], + "to": [10, 11, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 6, 8]}, + "faces": { + "north": {"uv": [0, 7, 1, 8.25], "texture": "#1"}, + "east": {"uv": [2.25, 8.75, 2.25, 10], "texture": "#1"}, + "south": {"uv": [0, 7, 1, 8.25], "texture": "#1"}, + "west": {"uv": [1.25, 8.75, 1.25, 10], "texture": "#1"}, + "up": {"uv": [3.75, 5.25, 3.5, 5.25], "texture": "#1"}, + "down": {"uv": [1.5, 5.5, 1.25, 5.5], "texture": "#1"} + } + }, + { + "name": "toes", + "from": [5, 6.1, 7], + "to": [11, 6.1, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 6.1, 7]}, + "faces": { + "north": {"uv": [7, 5, 8.5, 5], "texture": "#1"}, + "east": {"uv": [7.5, 0.5, 8.25, 0.5], "texture": "#1"}, + "south": {"uv": [7.5, 0.75, 9, 0.75], "texture": "#1"}, + "west": {"uv": [1, 7.5, 1.75, 7.5], "texture": "#1"}, + "up": {"uv": [6.25, 6.25, 4.75, 5.5], "texture": "#1"}, + "down": {"uv": [7.25, 0, 5.75, 0.75], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/statues/slime.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/statues/slime.json new file mode 100644 index 0000000000..36f97e523a --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/stone_set/statues/slime.json @@ -0,0 +1,91 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/stone_set/statues/stone_statue_base_1", + "1": "gm4_furniture:block/furniture/stone_set/statues/slime", + "particle": "gm4_furniture:block/furniture/stone_set/statues/stone_statue_base_1" + }, + "elements": [ + { + "from": [2, 4, 2], + "to": [14, 6, 14], + "faces": { + "north": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "east": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "south": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "west": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "up": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "down": {"uv": [0, 8, 6, 14], "texture": "#0"} + } + }, + { + "from": [3, 2, 3], + "to": [13, 4, 13], + "faces": { + "north": {"uv": [0, 14.5, 5, 15.5], "texture": "#0"}, + "east": {"uv": [0, 14.5, 5, 15.5], "texture": "#0"}, + "south": {"uv": [0, 14.5, 5, 15.5], "texture": "#0"}, + "west": {"uv": [0, 14.5, 5, 15.5], "texture": "#0"} + } + }, + { + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [6.5, 6.5, 12.5, 7.5], "texture": "#0"}, + "east": {"uv": [6.5, 6.5, 12.5, 7.5], "texture": "#0"}, + "south": {"uv": [6.5, 6.5, 12.5, 7.5], "texture": "#0"}, + "west": {"uv": [6.5, 6.5, 12.5, 7.5], "texture": "#0"}, + "up": {"uv": [6.5, 0, 12.5, 6], "texture": "#0"}, + "down": {"uv": [6.5, 8, 12.5, 14], "texture": "#0"} + } + }, + { + "name": "slime", + "from": [4, 6, 4], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 6, 5]}, + "faces": { + "north": {"uv": [0, 0, 4, 4], "texture": "#1"}, + "east": {"uv": [0, 4, 4, 8], "texture": "#1"}, + "south": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "west": {"uv": [4, 4, 8, 8], "texture": "#1"}, + "up": {"uv": [4, 12, 0, 8], "texture": "#1"}, + "down": {"uv": [12, 0, 8, 4], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/cherry/bench_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/cherry/bench_1.json new file mode 100644 index 0000000000..285b15a4a9 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/cherry/bench_1.json @@ -0,0 +1,259 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "gm4_furniture:block/furniture/wood_set/cherry/bench_1", + "particle": "gm4_furniture:block/furniture/wood_set/cherry/bench_1" + }, + "elements": [ + { + "name": "Leg_Front_Left", + "from": [29, 0, 1], + "to": [31, 12, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [29, 0, 1]}, + "faces": { + "north": {"uv": [5.5, 2.125, 5.75, 3.625], "texture": "#0"}, + "east": {"uv": [5.875, 2.125, 6.125, 3.625], "texture": "#0"}, + "south": {"uv": [5.5, 2.125, 5.75, 3.625], "texture": "#0"}, + "west": {"uv": [5.875, 2.125, 6.125, 3.625], "texture": "#0"}, + "up": {"uv": [6.5, 1.375, 6.25, 1.125], "texture": "#0"}, + "down": {"uv": [6.5, 1.125, 6.25, 1.375], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Left", + "from": [29, 0, 13], + "to": [31, 20, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [29, 0, 13]}, + "faces": { + "north": {"uv": [5.5, 1.125, 5.75, 3.625], "texture": "#0"}, + "east": {"uv": [5.875, 1.125, 6.125, 3.625], "texture": "#0"}, + "south": {"uv": [5.5, 1.125, 5.75, 3.625], "texture": "#0"}, + "west": {"uv": [6.125, 1.125, 5.875, 3.625], "texture": "#0"}, + "up": {"uv": [6.5, 1.375, 6.25, 1.125], "texture": "#0"}, + "down": {"uv": [6.5, 1.125, 6.25, 1.375], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Right", + "from": [-15, 0, 13], + "to": [-13, 20, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [-15, 0, 13]}, + "faces": { + "north": {"uv": [5.5, 1.125, 5.75, 3.625], "texture": "#0"}, + "east": {"uv": [5.875, 1.125, 6.125, 3.625], "texture": "#0"}, + "south": {"uv": [5.5, 1.125, 5.75, 3.625], "texture": "#0"}, + "west": {"uv": [5.875, 1.125, 6.125, 3.625], "texture": "#0"}, + "up": {"uv": [6.5, 1.375, 6.25, 1.125], "texture": "#0"}, + "down": {"uv": [6.5, 1.125, 6.25, 1.375], "texture": "#0"} + } + }, + { + "name": "Leg_Front_Right", + "from": [-15, 0, 1], + "to": [-13, 12, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [-15, 0, 1]}, + "faces": { + "north": {"uv": [5.5, 2.125, 5.75, 3.625], "texture": "#0"}, + "east": {"uv": [5.875, 2.125, 6.125, 3.625], "texture": "#0"}, + "south": {"uv": [5.5, 2.125, 5.75, 3.625], "texture": "#0"}, + "west": {"uv": [5.875, 2.125, 6.125, 3.625], "texture": "#0"}, + "up": {"uv": [6.5, 1.375, 6.25, 1.125], "texture": "#0"}, + "down": {"uv": [6.5, 1.125, 6.25, 1.375], "texture": "#0"} + } + }, + { + "name": "under_seat_panel", + "from": [-13, 4, 1], + "to": [29, 6, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [22, 4, 2]}, + "faces": { + "north": {"uv": [0, 7.625, 5.25, 7.875], "texture": "#0"}, + "east": {"uv": [7, 4.25, 8.75, 4.5], "texture": "#0"}, + "south": {"uv": [0, 6.875, 5.25, 7.125], "texture": "#0"}, + "west": {"uv": [5.25, 4.25, 7, 4.5], "texture": "#0"}, + "up": {"uv": [10.625, 7.125, 5.375, 5.375], "texture": "#0"}, + "down": {"uv": [5.25, 0, 0, 1.75], "texture": "#0"} + } + }, + { + "name": "Left_Panel", + "from": [29, 4, 3], + "to": [31, 12, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [28, 3, 5]}, + "faces": { + "north": {"uv": [7.375, 4.5, 7.625, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 0, 6.75, 1], "texture": "#0"}, + "south": {"uv": [7.125, 4.5, 7.375, 5.5], "texture": "#0"}, + "west": {"uv": [5.5, 0, 6.75, 1], "texture": "#0"}, + "up": {"uv": [7.125, 3.625, 6.875, 2.375], "texture": "#0"}, + "down": {"uv": [7.125, 2.375, 6.875, 3.625], "texture": "#0"} + } + }, + { + "name": "Right_Panel", + "from": [-15, 4, 3], + "to": [-13, 12, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-16, 3, 5]}, + "faces": { + "north": {"uv": [6.875, 4.5, 7.125, 5.5], "texture": "#0"}, + "east": {"uv": [5.5, 0, 6.75, 1], "texture": "#0"}, + "south": {"uv": [6.625, 4.5, 6.875, 5.5], "texture": "#0"}, + "west": {"uv": [5.5, 0, 6.75, 1], "texture": "#0"}, + "up": {"uv": [7.125, 3.625, 6.875, 2.375], "texture": "#0"}, + "down": {"uv": [7.125, 2.375, 6.875, 3.625], "texture": "#0"} + } + }, + { + "name": "back_seat_panel", + "from": [-13, 6, 12], + "to": [29, 19, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 18, 13]}, + "faces": { + "north": {"uv": [0, 1.875, 5.25, 3.5], "texture": "#0", "tintindex": 0}, + "east": {"uv": [6.25, 2, 6.625, 3.625], "texture": "#0", "tintindex": 0}, + "south": {"uv": [0, 0, 5.25, 1.625], "texture": "#0"}, + "west": {"uv": [6.25, 2, 6.625, 3.625], "texture": "#0", "tintindex": 0}, + "up": {"uv": [5.25, 4, 0, 3.625], "texture": "#0", "tintindex": 0}, + "down": {"uv": [10.5, 3.625, 5.25, 4], "texture": "#0"} + } + }, + { + "name": "flat_seat", + "from": [-13, 6, 2], + "to": [29, 8, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 0]}, + "faces": { + "north": {"uv": [0, 8.375, 5.25, 8.625], "texture": "#0", "tintindex": 0}, + "east": {"uv": [5.25, 4.5, 6.5, 4.75], "texture": "#0"}, + "south": {"uv": [5.25, 3.625, 10.5, 3.875], "texture": "#0"}, + "west": {"uv": [8.75, 4.25, 10, 4.5], "texture": "#0"}, + "up": {"uv": [5.25, 5.375, 0, 4.125], "texture": "#0", "tintindex": 0}, + "down": {"uv": [10.5, 3.625, 5.25, 4.875], "texture": "#0"} + } + }, + { + "name": "top_across", + "from": [-14, 19, 13], + "to": [30, 21, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [-9, 20, 13]}, + "faces": { + "north": {"uv": [0, 7.25, 5.5, 7.5], "texture": "#0"}, + "east": {"uv": [5.625, 7.625, 5.875, 7.875], "texture": "#0"}, + "south": {"uv": [0, 8, 5.5, 8.25], "texture": "#0"}, + "west": {"uv": [5.625, 7.625, 5.875, 7.875], "texture": "#0"}, + "up": {"uv": [5.5, 7.875, 0, 7.625], "texture": "#0"}, + "down": {"uv": [10.75, 4, 5.25, 4.25], "texture": "#0"} + } + }, + { + "name": "top_right", + "from": [-11, 19, 12], + "to": [5, 20, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 19, 11]}, + "faces": { + "north": {"uv": [0, 5.75, 2, 5.875], "texture": "#0", "tintindex": 0}, + "east": {"uv": [2.125, 5.5, 2.25, 5.625], "texture": "#0", "tintindex": 0}, + "south": {"uv": [0, 6, 2, 6.125], "texture": "#0"}, + "west": {"uv": [2.125, 5.5, 2.25, 5.625], "texture": "#0", "tintindex": 0}, + "up": {"uv": [0, 5.5, 2, 5.625], "texture": "#0", "tintindex": 0}, + "down": {"uv": [0, 6, 2, 6.125], "texture": "#0"} + } + }, + { + "name": "top_left", + "from": [11, 19, 12], + "to": [27, 20, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 19, 11]}, + "faces": { + "north": {"uv": [0, 5.875, 2, 5.75], "texture": "#0", "tintindex": 0}, + "east": {"uv": [2.125, 5.5, 2.25, 5.625], "texture": "#0", "tintindex": 0}, + "south": {"uv": [0, 6, 2, 6.125], "texture": "#0"}, + "west": {"uv": [2.125, 5.5, 2.25, 5.625], "texture": "#0", "tintindex": 0}, + "up": {"uv": [0, 5.5, 2, 5.625], "texture": "#0", "tintindex": 0}, + "down": {"uv": [0, 6, 2, 6.125], "texture": "#0"} + } + }, + { + "name": "ear_left", + "from": [20.5, 18.96447, 13.1], + "to": [24.5, 22.96447, 14.9], + "rotation": {"angle": -45, "axis": "z", "origin": [22.5, 20.96447, 13.95]}, + "faces": { + "north": {"uv": [7, 0, 7.5, 0.5], "texture": "#0"}, + "east": {"uv": [8.25, 0, 8.5, 0.5], "texture": "#0"}, + "south": {"uv": [7.625, 0, 8.125, 0.5], "texture": "#0"}, + "west": {"uv": [8.25, 0, 8.5, 0.5], "texture": "#0"}, + "up": {"uv": [7, 0.625, 7.5, 0.8625], "texture": "#0"}, + "down": {"uv": [7, 0.625, 7.5, 0.8625], "texture": "#0"} + } + }, + { + "name": "ear_right", + "from": [-8.5, 18.96447, 13.1], + "to": [-4.5, 22.96447, 14.9], + "rotation": {"angle": -45, "axis": "z", "origin": [-6.5, 20.96447, 13.95]}, + "faces": { + "north": {"uv": [7, 0, 7.5, 0.5], "texture": "#0"}, + "east": {"uv": [8.25, 0, 8.5, 0.5], "texture": "#0"}, + "south": {"uv": [7.625, 0, 8.125, 0.5], "texture": "#0"}, + "west": {"uv": [8.25, 0, 8.5, 0.5], "texture": "#0"}, + "up": {"uv": [7, 0.625, 7.5, 0.8625], "texture": "#0"}, + "down": {"uv": [7, 0.625, 7.5, 0.8625], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Legs", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "Panels", + "origin": [8, 8, 8], + "color": 0, + "children": [4, 5, 6, 7, 8] + }, + { + "name": "Top_Shaping", + "origin": [8, 8, 8], + "color": 0, + "children": [9, 10, 11, 12, 13] + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 1.75, 0], + "scale": [0.1875, 0.1875, 0.1875] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 1.75, 0], + "scale": [0.1875, 0.1875, 0.1875] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.3125, 0.3125, 0.3125] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0.5, -3.25], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/cherry/chair_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/cherry/chair_1.json new file mode 100644 index 0000000000..e81af5d6ed --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/cherry/chair_1.json @@ -0,0 +1,247 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/wood_set/cherry/chair_1", + "particle": "gm4_furniture:block/furniture/wood_set/cherry/chair_1" + }, + "elements": [ + { + "name": "Leg_Front_Left", + "from": [13, 0, 1], + "to": [15, 12, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 0, 1]}, + "faces": { + "north": {"uv": [11, 4, 12, 10], "texture": "#0"}, + "east": {"uv": [12.5, 4, 13.5, 10], "texture": "#0"}, + "south": {"uv": [11, 4, 12, 10], "texture": "#0"}, + "west": {"uv": [12.5, 4, 13.5, 10], "texture": "#0"}, + "up": {"uv": [12, 11.5, 11, 10.5], "texture": "#0"}, + "down": {"uv": [12, 10.5, 11, 11.5], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Left", + "from": [13, 0, 13], + "to": [15, 20, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 0, 13]}, + "faces": { + "north": {"uv": [11, 0, 12, 10], "texture": "#0"}, + "east": {"uv": [12.5, 0, 13.5, 10], "texture": "#0"}, + "south": {"uv": [11, 0, 12, 10], "texture": "#0"}, + "west": {"uv": [12.5, 0, 13.5, 10], "texture": "#0"}, + "up": {"uv": [12, 11.5, 11, 10.5], "texture": "#0"}, + "down": {"uv": [12, 10.5, 11, 11.5], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Right", + "from": [1, 0, 13], + "to": [3, 20, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 13]}, + "faces": { + "north": {"uv": [11, 0, 12, 10], "texture": "#0"}, + "east": {"uv": [12.5, 0, 13.5, 10], "texture": "#0"}, + "south": {"uv": [11, 0, 12, 10], "texture": "#0"}, + "west": {"uv": [12.5, 0, 13.5, 10], "texture": "#0"}, + "up": {"uv": [12, 11.5, 11, 10.5], "texture": "#0"}, + "down": {"uv": [12, 10.5, 11, 11.5], "texture": "#0"} + } + }, + { + "name": "Leg_Front_Right", + "from": [1, 0, 1], + "to": [3, 12, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 1]}, + "faces": { + "north": {"uv": [11, 4, 12, 10], "texture": "#0"}, + "east": {"uv": [12.5, 4, 13.5, 10], "texture": "#0"}, + "south": {"uv": [11, 4, 12, 10], "texture": "#0"}, + "west": {"uv": [12.5, 4, 13.5, 10], "texture": "#0"}, + "up": {"uv": [12, 11.5, 11, 10.5], "texture": "#0"}, + "down": {"uv": [12, 10.5, 11, 11.5], "texture": "#0"} + } + }, + { + "name": "under_seat_panel", + "from": [3, 4, 1], + "to": [13, 6, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [22, 4, 2]}, + "faces": { + "north": {"uv": [0, 13.5, 5, 14.5], "texture": "#0"}, + "east": {"uv": [0, 15, 7, 16], "texture": "#0"}, + "south": {"uv": [0, 12, 5, 13], "texture": "#0"}, + "west": {"uv": [0, 15, 7, 16], "texture": "#0"}, + "up": {"uv": [5, 7, 0, 0], "texture": "#0"}, + "down": {"uv": [5, 0, 0, 7], "texture": "#0"} + } + }, + { + "name": "Left_Panel", + "from": [13, 4, 3], + "to": [15, 12, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 3, 5]}, + "faces": { + "north": {"uv": [15, 1, 16, 5], "texture": "#0"}, + "east": {"uv": [0, 7.5, 5, 11.5], "texture": "#0"}, + "south": {"uv": [15, 1, 16, 5], "texture": "#0"}, + "west": {"uv": [0, 7.5, 5, 11.5], "texture": "#0"}, + "up": {"uv": [16, 5, 15, 0], "texture": "#0"}, + "down": {"uv": [15, 0, 14, 5], "texture": "#0"} + } + }, + { + "name": "Right_Panel", + "from": [1, 4, 3], + "to": [3, 12, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 3, 5]}, + "faces": { + "north": {"uv": [15, 1, 16, 5], "texture": "#0"}, + "east": {"uv": [0, 7.5, 5, 11.5], "texture": "#0"}, + "south": {"uv": [15, 1, 16, 5], "texture": "#0"}, + "west": {"uv": [0, 7.5, 5, 11.5], "texture": "#0"}, + "up": {"uv": [16, 5, 15, 0], "texture": "#0"}, + "down": {"uv": [15, 0, 14, 5], "texture": "#0"} + } + }, + { + "name": "back_seat_panel", + "from": [3, 6, 12], + "to": [13, 19, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 18, 13]}, + "faces": { + "north": {"uv": [5.5, 0, 10.5, 6.5], "texture": "#0", "tintindex": 0}, + "east": {"uv": [14, 5, 15.5, 11.5], "texture": "#0", "tintindex": 0}, + "south": {"uv": [0, 0, 5, 6.5], "texture": "#0"}, + "west": {"uv": [15.5, 5, 14, 11.5], "texture": "#0", "tintindex": 0}, + "up": {"uv": [10.5, 12, 5.5, 10.5], "texture": "#0", "tintindex": 0}, + "down": {"uv": [5, 10, 0, 11.5], "texture": "#0"} + } + }, + { + "name": "flat_seat", + "from": [3, 6, 2], + "to": [13, 8, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 0]}, + "faces": { + "north": {"uv": [5.5, 12.5, 10.5, 13.5], "texture": "#0", "tintindex": 0}, + "east": {"uv": [11, 11.5, 16, 12.5], "texture": "#0"}, + "south": {"uv": [11, 11.5, 16, 12.5], "texture": "#0"}, + "west": {"uv": [11, 11.5, 16, 12.5], "texture": "#0"}, + "up": {"uv": [10.5, 12, 5.5, 7], "texture": "#0", "tintindex": 0}, + "down": {"uv": [10.5, 7, 5.5, 12], "texture": "#0"} + } + }, + { + "name": "top_shaping", + "from": [2, 19, 13], + "to": [14, 21, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [-9, 20, 13]}, + "faces": { + "north": {"uv": [0, 15, 6, 16], "texture": "#0"}, + "east": {"uv": [7, 15, 8, 16], "texture": "#0"}, + "south": {"uv": [0, 15, 6, 16], "texture": "#0"}, + "west": {"uv": [7, 15, 8, 16], "texture": "#0"}, + "up": {"uv": [6, 16, 0, 15], "texture": "#0"}, + "down": {"uv": [6, 15, 0, 16], "texture": "#0"} + } + }, + { + "name": "cushion_shaping", + "from": [4, 19, 12], + "to": [12, 20, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 19, 12]}, + "faces": { + "north": {"uv": [5.5, 14, 9.5, 14.5], "texture": "#0", "tintindex": 0}, + "east": {"uv": [10, 14, 10.5, 14.5], "texture": "#0", "tintindex": 0}, + "south": {"uv": [5.5, 14, 9.5, 14.5], "texture": "#0"}, + "west": {"uv": [10, 14, 10.5, 14.5], "texture": "#0", "tintindex": 0}, + "up": {"uv": [9.5, 14.5, 5.5, 14], "texture": "#0", "tintindex": 0}, + "down": {"uv": [9.5, 14, 5.5, 14.5], "texture": "#0"} + } + }, + { + "name": "left_ear", + "from": [9.5, 19.5, 13.1], + "to": [12.5, 22.5, 14.9], + "rotation": {"angle": 45, "axis": "z", "origin": [11, 21, 14]}, + "faces": { + "north": {"uv": [14, 14.5, 15.5, 16], "texture": "#0"}, + "east": {"uv": [12.5, 14, 13.5, 15.5], "texture": "#0"}, + "south": {"uv": [14, 12.5, 15.5, 14], "texture": "#0"}, + "west": {"uv": [12.5, 14, 13.5, 15.5], "texture": "#0"}, + "up": {"uv": [12, 15.5, 10.5, 14.5], "texture": "#0"}, + "down": {"uv": [12, 14.5, 10.5, 15.5], "texture": "#0"} + } + }, + { + "name": "right_ear", + "from": [3.5, 19.5, 13.1], + "to": [6.5, 22.5, 14.9], + "rotation": {"angle": 45, "axis": "z", "origin": [5, 21, 14]}, + "faces": { + "north": {"uv": [14, 14.5, 15.5, 16], "texture": "#0"}, + "east": {"uv": [12.5, 14, 13.5, 15.5], "texture": "#0"}, + "south": {"uv": [14, 12.5, 15.5, 14], "texture": "#0"}, + "west": {"uv": [12.5, 14, 13.5, 15.5], "texture": "#0"}, + "up": {"uv": [12, 15.5, 10.5, 14.5], "texture": "#0"}, + "down": {"uv": [12, 14.5, 10.5, 15.5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "Legs", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "Panels", + "origin": [8, 8, 8], + "color": 0, + "children": [4, 5, 6, 7, 8] + }, + { + "name": "shaping", + "origin": [8, 8, 8], + "color": 0, + "children": [9, 10, 11, 12] + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, -1.75, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/cherry/stool_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/cherry/stool_1.json new file mode 100644 index 0000000000..ec51f57fe2 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/cherry/stool_1.json @@ -0,0 +1,218 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "0": "gm4_furniture:block/furniture/wood_set/cherry/stool_1", + "particle": "gm4_furniture:block/furniture/wood_set/cherry/stool_1" + }, + "elements": [ + { + "name": "Leg_Front_Left", + "from": [13, 0, 1], + "to": [15, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 0, 1]}, + "faces": { + "north": {"uv": [8.25, 1.5, 8.75, 2.25], "texture": "#0"}, + "east": {"uv": [8.25, 2.5, 8.75, 3.25], "texture": "#0"}, + "south": {"uv": [8.25, 1.5, 8.75, 2.25], "texture": "#0"}, + "west": {"uv": [8.25, 2.5, 8.75, 3.25], "texture": "#0"}, + "up": {"uv": [9.5, 3.25, 9, 2.75], "texture": "#0"}, + "down": {"uv": [9.5, 2.75, 9, 3.25], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Left", + "from": [13, 0, 13], + "to": [15, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 0, 13]}, + "faces": { + "north": {"uv": [8.25, 1.5, 8.75, 2.25], "texture": "#0"}, + "east": {"uv": [8.25, 2.5, 8.75, 3.25], "texture": "#0"}, + "south": {"uv": [8.25, 1.5, 8.75, 2.25], "texture": "#0"}, + "west": {"uv": [8.25, 2.5, 8.75, 3.25], "texture": "#0"}, + "up": {"uv": [9.5, 3.25, 9, 2.75], "texture": "#0"}, + "down": {"uv": [9.5, 2.75, 9, 3.25], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Right", + "from": [1, 0, 13], + "to": [3, 3, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 13]}, + "faces": { + "north": {"uv": [8.25, 1.5, 8.75, 2.25], "texture": "#0"}, + "east": {"uv": [8.25, 2.5, 8.75, 3.25], "texture": "#0"}, + "south": {"uv": [8.25, 1.5, 8.75, 2.25], "texture": "#0"}, + "west": {"uv": [8.25, 2.5, 8.75, 3.25], "texture": "#0"}, + "up": {"uv": [9.5, 3.25, 9, 2.75], "texture": "#0"}, + "down": {"uv": [9.5, 2.75, 9, 3.25], "texture": "#0"} + } + }, + { + "name": "Leg_Front_Right", + "from": [1, 0, 1], + "to": [3, 3, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 1]}, + "faces": { + "north": {"uv": [8.25, 1.5, 8.75, 2.25], "texture": "#0"}, + "east": {"uv": [8.25, 2.5, 8.75, 3.25], "texture": "#0"}, + "south": {"uv": [8.25, 1.5, 8.75, 2.25], "texture": "#0"}, + "west": {"uv": [8.25, 2.5, 8.75, 3.25], "texture": "#0"}, + "up": {"uv": [9.5, 3.25, 9, 2.75], "texture": "#0"}, + "down": {"uv": [9.5, 2.75, 9, 3.25], "texture": "#0"} + } + }, + { + "name": "back_seat_panel", + "from": [1, 3, 13], + "to": [15, 10, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 13]}, + "faces": { + "north": {"uv": [3.75, 3.25, 7.25, 5], "texture": "#0"}, + "east": {"uv": [7.5, 1.5, 8, 3.25], "texture": "#0"}, + "south": {"uv": [0, 3.25, 3.5, 5], "texture": "#0"}, + "west": {"uv": [8, 1.5, 7.5, 3.25], "texture": "#0"}, + "up": {"uv": [11, 0.5, 7.5, 0], "texture": "#0"}, + "down": {"uv": [11, 0.75, 7.5, 1.25], "texture": "#0"} + } + }, + { + "name": "flat_seat_bottom", + "from": [1, 3, 1], + "to": [15, 4, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 3, 0]}, + "faces": { + "north": {"uv": [3.25, 5.75, 6.75, 6], "texture": "#0"}, + "east": {"uv": [3.25, 5.75, 6.25, 6], "texture": "#0"}, + "south": {"uv": [3.25, 5.75, 6.75, 6], "texture": "#0"}, + "west": {"uv": [3.25, 5.75, 6.25, 6], "texture": "#0"}, + "up": {"uv": [6.75, 9.25, 3.25, 6.25], "texture": "#0"}, + "down": {"uv": [3.5, 0, 0, 3], "texture": "#0"} + } + }, + { + "name": "flat_seat_dyeable", + "from": [1, 4, 1], + "to": [15, 6, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 4, 0]}, + "faces": { + "north": {"uv": [3.25, 5.25, 6.75, 5.75], "texture": "#0", "tintindex": 0}, + "east": {"uv": [3.25, 5.25, 6.25, 5.75], "texture": "#0", "tintindex": 0}, + "south": {"uv": [3.25, 5.25, 6.75, 5.75], "texture": "#0"}, + "west": {"uv": [3.25, 5.25, 6.25, 5.75], "texture": "#0", "tintindex": 0}, + "up": {"uv": [7.25, 3, 3.75, 0], "texture": "#0", "tintindex": 0}, + "down": {"uv": [6.75, 6.25, 3.25, 9.25], "texture": "#0"} + } + }, + { + "name": "arm_left", + "from": [13.75, 4.5, 1.1], + "to": [15.75, 8.5, 13], + "rotation": {"angle": -22.5, "axis": "z", "origin": [14.75, 6.5, 7]}, + "faces": { + "north": {"uv": [11, 3.25, 10.5, 4.25], "texture": "#0", "tintindex": 0}, + "east": {"uv": [0, 6.5, 3, 7.5], "texture": "#0", "tintindex": 0}, + "south": {"uv": [8.25, 3.75, 7.75, 4.75], "texture": "#0", "tintindex": 0}, + "west": {"uv": [0, 5.25, 3, 6.25], "texture": "#0", "tintindex": 0}, + "up": {"uv": [9.75, 4.5, 10.25, 1.5], "texture": "#0", "tintindex": 0}, + "down": {"uv": [10.25, 1.5, 9.75, 4.5], "texture": "#0"} + } + }, + { + "name": "arm_right", + "from": [0.25, 4.5, 1.1], + "to": [2.25, 8.5, 13], + "rotation": {"angle": 22.5, "axis": "z", "origin": [1.25, 6.5, 7]}, + "faces": { + "north": {"uv": [10.5, 3.25, 11, 4.25], "texture": "#0", "tintindex": 0}, + "east": {"uv": [0, 5.25, 3, 6.25], "texture": "#0", "tintindex": 0}, + "south": {"uv": [7.75, 3.75, 8.25, 4.75], "texture": "#0", "tintindex": 0}, + "west": {"uv": [0, 6.5, 3, 7.5], "texture": "#0", "tintindex": 0}, + "up": {"uv": [10.25, 4.5, 9.75, 1.5], "texture": "#0", "tintindex": 0}, + "down": {"uv": [10.25, 1.5, 9.75, 4.5], "texture": "#0"} + } + }, + { + "name": "ear_right", + "from": [2, 7.75, 13.1], + "to": [6, 11.75, 14.9], + "rotation": {"angle": -45, "axis": "z", "origin": [4.5, 9.25, 14]}, + "faces": { + "north": {"uv": [7, 5.25, 8, 6.25], "texture": "#0"}, + "east": {"uv": [9.5, 5.25, 10, 6.25], "texture": "#0"}, + "south": {"uv": [8.25, 5.25, 9.25, 6.25], "texture": "#0"}, + "west": {"uv": [9.5, 5.25, 10, 6.25], "texture": "#0"}, + "up": {"uv": [11.25, 6.25, 10.25, 5.75], "texture": "#0"}, + "down": {"uv": [11.25, 5.75, 10.25, 6.25], "texture": "#0"} + } + }, + { + "name": "ear_left", + "from": [9.7, 7.5, 13.1], + "to": [13.7, 11.5, 14.9], + "rotation": {"angle": -45, "axis": "z", "origin": [12.2, 10, 14]}, + "faces": { + "north": {"uv": [7, 5.25, 8, 6.25], "texture": "#0"}, + "east": {"uv": [9.5, 5.25, 10, 6.25], "texture": "#0"}, + "south": {"uv": [8.25, 5.25, 9.25, 6.25], "texture": "#0"}, + "west": {"uv": [9.5, 5.25, 10, 6.25], "texture": "#0"}, + "up": {"uv": [11.25, 6.25, 10.25, 5.75], "texture": "#0"}, + "down": {"uv": [11.25, 5.75, 10.25, 6.25], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3.25], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "Legs", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "Panels", + "origin": [8, 8, 8], + "color": 0, + "children": [4, 5, 6] + }, + { + "name": "diagonals", + "origin": [8, 8, 8], + "color": 0, + "children": [7, 8, 9, 10] + } + ] +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/1x1_table_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/1x1_table_1.json similarity index 97% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/1x1_table_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/1x1_table_1.json index fb66ad1e75..0749ad282b 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/1x1_table_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/1x1_table_1.json @@ -2,8 +2,8 @@ "credit": "Made with Blockbench", "texture_size": [64, 64], "textures": { - "0": "gm4_furniture:block/furniture/wood_set/fancy/1x1_table_1", - "particle": "gm4_furniture:block/furniture/wood_set/fancy/1x1_table_1" + "0": "gm4_furniture:block/furniture/wood_set/dark_oak/1x1_table_1", + "particle": "gm4_furniture:block/furniture/wood_set/dark_oak/1x1_table_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/2x2_table_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/2x2_table_1.json similarity index 98% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/2x2_table_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/2x2_table_1.json index d0f505809c..175bc5fe9e 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/2x2_table_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/2x2_table_1.json @@ -1,8 +1,8 @@ { "texture_size": [128, 128], "textures": { - "0": "gm4_furniture:block/furniture/wood_set/fancy/2x2_table_1", - "particle": "gm4_furniture:block/furniture/wood_set/fancy/2x2_table_1" + "0": "gm4_furniture:block/furniture/wood_set/dark_oak/2x2_table_1", + "particle": "gm4_furniture:block/furniture/wood_set/dark_oak/2x2_table_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/bench_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/bench_1.json similarity index 99% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/bench_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/bench_1.json index 236afaeb91..fdd3d00533 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/bench_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/bench_1.json @@ -2,8 +2,8 @@ "credit": "Made with Blockbench", "texture_size": [128, 128], "textures": { - "0": "gm4_furniture:block/furniture/wood_set/fancy/bench_1", - "particle": "gm4_furniture:block/furniture/wood_set/fancy/bench_1" + "0": "gm4_furniture:block/furniture/wood_set/dark_oak/bench_1", + "particle": "gm4_furniture:block/furniture/wood_set/dark_oak/bench_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/chair_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/chair_1.json similarity index 98% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/chair_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/chair_1.json index 262842aedf..db340c8d01 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/chair_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/chair_1.json @@ -2,8 +2,8 @@ "credit": "Made with Blockbench", "texture_size": [64, 64], "textures": { - "0": "gm4_furniture:block/furniture/wood_set/fancy/chair_1", - "particle": "gm4_furniture:block/furniture/wood_set/fancy/chair_1" + "0": "gm4_furniture:block/furniture/wood_set/dark_oak/chair_1", + "particle": "gm4_furniture:block/furniture/wood_set/dark_oak/chair_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/light_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/light_1.json similarity index 96% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/light_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/light_1.json index d6a3aeefa5..40787b7e79 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/light_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/light_1.json @@ -1,8 +1,8 @@ { "texture_size": [32, 32], "textures": { - "0": "gm4_furniture:block/furniture/wood_set/fancy/light_1", - "particle": "gm4_furniture:block/furniture/wood_set/fancy/light_1" + "0": "gm4_furniture:block/furniture/wood_set/dark_oak/light_1", + "particle": "gm4_furniture:block/furniture/wood_set/dark_oak/light_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/stool_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/stool_1.json similarity index 97% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/stool_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/stool_1.json index afe5d4ee3d..a32bf1659a 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/fancy/stool_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/dark_oak/stool_1.json @@ -1,8 +1,8 @@ { "credit": "Made with Blockbench", "textures": { - "0": "gm4_furniture:block/furniture/wood_set/fancy/stool_1", - "particle": "gm4_furniture:block/furniture/wood_set/fancy/stool_1" + "0": "gm4_furniture:block/furniture/wood_set/dark_oak/stool_1", + "particle": "gm4_furniture:block/furniture/wood_set/dark_oak/stool_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/1x1_table_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/1x1_table_1.json similarity index 95% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/1x1_table_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/1x1_table_1.json index d8613a6d8e..81d625d5ca 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/1x1_table_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/1x1_table_1.json @@ -1,8 +1,8 @@ { "credit": "Made with Blockbench", "textures": { - "0": "gm4_furniture:block/furniture/wood_set/plain/1x1_table_1", - "particle": "gm4_furniture:block/furniture/wood_set/plain/1x1_table_1" + "0": "gm4_furniture:block/furniture/wood_set/oak/1x1_table_1", + "particle": "gm4_furniture:block/furniture/wood_set/oak/1x1_table_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/2x2_table_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/2x2_table_1.json similarity index 96% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/2x2_table_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/2x2_table_1.json index 828a3414fa..90eff38c54 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/2x2_table_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/2x2_table_1.json @@ -2,8 +2,8 @@ "credit": "Made with Blockbench", "texture_size": [128, 128], "textures": { - "0": "gm4_furniture:block/furniture/wood_set/plain/2x2_table_1", - "particle": "gm4_furniture:block/furniture/wood_set/plain/2x2_table_1" + "0": "gm4_furniture:block/furniture/wood_set/oak/2x2_table_1", + "particle": "gm4_furniture:block/furniture/wood_set/oak/2x2_table_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/bench_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/bench_1.json similarity index 95% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/bench_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/bench_1.json index 65e291fb41..f0d82a5e73 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/bench_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/bench_1.json @@ -2,8 +2,8 @@ "credit": "Made with Blockbench", "texture_size": [64, 64], "textures": { - "0": "gm4_furniture:block/furniture/wood_set/plain/bench_1", - "particle": "gm4_furniture:block/furniture/wood_set/plain/bench_1" + "0": "gm4_furniture:block/furniture/wood_set/oak/bench_1", + "particle": "gm4_furniture:block/furniture/wood_set/oak/bench_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/chair_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/chair_1.json similarity index 97% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/chair_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/chair_1.json index 38148654ea..15a44ff442 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/chair_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/chair_1.json @@ -1,8 +1,8 @@ { "credit": "Made with Blockbench", "textures": { - "0": "gm4_furniture:block/furniture/wood_set/plain/chair_1", - "particle": "gm4_furniture:block/furniture/wood_set/plain/chair_1" + "0": "gm4_furniture:block/furniture/wood_set/oak/chair_1", + "particle": "gm4_furniture:block/furniture/wood_set/oak/chair_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/light_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/light_1.json new file mode 100644 index 0000000000..d007693f70 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/light_1.json @@ -0,0 +1,101 @@ +{ + "textures": { + "0": "gm4_furniture:block/furniture/misc/candle_wick_1", + "1": "gm4_furniture:block/furniture/misc/candle_1", + "2": "gm4_furniture:block/furniture/wood_set/oak/light_1", + "particle": "gm4_furniture:block/furniture/wood_set/oak/light_1" + }, + "elements": [ + { + "from": [6.5, 8.25, 8], + "to": [9.5, 12.25, 8], + "shade": false, + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [12, 0, 15, 4], "texture": "#0"}, + "south": {"uv": [12, 0, 15, 4], "texture": "#0"} + } + }, + { + "from": [6.5, 8.25, 8], + "to": [9.5, 12.25, 8], + "shade": false, + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8.25, 8], "rescale": true}, + "faces": { + "north": {"uv": [0, 0, 3, 4], "texture": "#0"}, + "south": {"uv": [0, 0, 3, 4], "texture": "#0"} + } + }, + { + "from": [6.75, 2.75, 6.75], + "to": [9.25, 8.25, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [0.25, -3.75, -3.75]}, + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#1", "tintindex": 0}, + "east": {"uv": [9, 0, 11, 5], "texture": "#1", "tintindex": 0}, + "south": {"uv": [6, 0, 8, 5], "texture": "#1", "tintindex": 0}, + "west": {"uv": [9, 0, 11, 5], "texture": "#1", "tintindex": 0}, + "up": {"uv": [6, 6, 8, 8], "texture": "#1", "tintindex": 0} + } + }, + { + "from": [7, 3, 7], + "to": [9, 8, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, -4, -4]}, + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#1", "tintindex": 0}, + "east": {"uv": [3, 0, 5, 5], "texture": "#1", "tintindex": 0}, + "south": {"uv": [0, 0, 2, 5], "texture": "#1", "tintindex": 0}, + "west": {"uv": [3, 0, 5, 5], "texture": "#1", "tintindex": 0}, + "up": {"uv": [0, 6, 2, 8], "texture": "#1", "tintindex": 0} + } + }, + { + "from": [6, 0, 6], + "to": [10, 3, 10], + "faces": { + "north": {"uv": [0, 5, 4, 8], "texture": "#2"}, + "east": {"uv": [0, 5, 4, 8], "texture": "#2"}, + "south": {"uv": [0, 5, 4, 8], "texture": "#2"}, + "west": {"uv": [0, 5, 4, 8], "texture": "#2"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#2"}, + "down": {"uv": [5, 0, 9, 4], "texture": "#2"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 2], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 0.75, 2], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 3.25, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [0, 3.25, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 2.25, 0] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/light_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/light_1_lit.json similarity index 95% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/light_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/light_1_lit.json index 53834f6c56..2efd208635 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/light_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/light_1_lit.json @@ -2,8 +2,8 @@ "textures": { "0": "gm4_furniture:block/furniture/misc/candle_fire_1", "1": "gm4_furniture:block/furniture/misc/candle_1", - "2": "gm4_furniture:block/furniture/wood_set/plain/light_1", - "particle": "gm4_furniture:block/furniture/misc/candle_fire_1" + "2": "gm4_furniture:block/furniture/wood_set/oak/light_1", + "particle": "gm4_furniture:block/furniture/wood_set/oak/light_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/stool_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/stool_1.json similarity index 95% rename from gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/stool_1.json rename to gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/stool_1.json index e03c3d7e8a..4203ef2040 100644 --- a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/plain/stool_1.json +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/oak/stool_1.json @@ -1,8 +1,8 @@ { "credit": "Made with Blockbench", "textures": { - "0": "gm4_furniture:block/furniture/wood_set/plain/stool_1", - "particle": "gm4_furniture:block/furniture/wood_set/plain/stool_1" + "0": "gm4_furniture:block/furniture/wood_set/oak/stool_1", + "particle": "gm4_furniture:block/furniture/wood_set/oak/stool_1" }, "elements": [ { diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/1x1_table_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/1x1_table_1.json new file mode 100644 index 0000000000..cdc0a4b311 --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/1x1_table_1.json @@ -0,0 +1,127 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/wood_set/spruce/1x1_table_1", + "particle": "gm4_furniture:block/furniture/wood_set/spruce/1x1_table_1" + }, + "elements": [ + { + "name": "top_flat", + "from": [0, 14, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 14, 0]}, + "faces": { + "north": {"uv": [0, 8, 8, 7], "texture": "#0"}, + "east": {"uv": [0, 8.5, 8, 9.5], "texture": "#0"}, + "south": {"uv": [8, 0, 0, 1], "texture": "#0"}, + "west": {"uv": [0, 8.5, 8, 9.5], "texture": "#0"}, + "up": {"uv": [8, 8, 0, 0], "texture": "#0"}, + "down": {"uv": [8, 0, 0, 8], "texture": "#0"} + } + }, + { + "name": "undertop_flat", + "from": [3, 13, 3], + "to": [13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 0]}, + "faces": { + "north": {"uv": [8.5, 4.5, 13.5, 5], "texture": "#0"}, + "east": {"uv": [8.5, 5.5, 13.5, 6], "texture": "#0"}, + "south": {"uv": [8.5, 4.5, 13.5, 5], "texture": "#0"}, + "west": {"uv": [8.5, 5.5, 13.5, 6], "texture": "#0"}, + "up": {"uv": [13.5, 12.5, 8.5, 7.5], "texture": "#0"}, + "down": {"uv": [13.5, 0, 8.5, 5], "texture": "#0"} + } + }, + { + "name": "leg", + "from": [7, 2, 7], + "to": [9, 13, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [6.5, 0, 6.5]}, + "faces": { + "north": {"uv": [14, 5.5, 15, 0], "texture": "#0"}, + "east": {"uv": [14, 6, 15, 11.5], "texture": "#0"}, + "south": {"uv": [14, 5.5, 15, 0], "texture": "#0"}, + "west": {"uv": [14, 6, 15, 11.5], "texture": "#0"}, + "up": {"uv": [11, 15, 9, 13], "texture": "#0"}, + "down": {"uv": [16, 12, 14, 14], "texture": "#0"} + } + }, + { + "name": "foot_e+w", + "from": [3, 0, 7], + "to": [13, 2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 6.5]}, + "faces": { + "north": {"uv": [0, 8.5, 5, 9.5], "texture": "#0"}, + "east": {"uv": [7, 8.5, 8, 9.5], "texture": "#0"}, + "south": {"uv": [0, 8.5, 5, 9.5], "texture": "#0"}, + "west": {"uv": [7, 8.5, 8, 9.5], "texture": "#0"}, + "up": {"uv": [8, 11, 3, 10], "texture": "#0"}, + "down": {"uv": [8, 12.5, 3, 13.5], "texture": "#0"} + } + }, + { + "name": "foot_n+s", + "from": [7, 0, 3], + "to": [9, 2, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [7.5, 0, 2]}, + "faces": { + "north": {"uv": [7, 8.5, 8, 9.5], "texture": "#0"}, + "east": {"uv": [0, 8.5, 5, 9.5], "texture": "#0"}, + "south": {"uv": [7, 8.5, 8, 9.5], "texture": "#0"}, + "west": {"uv": [0, 8.5, 5, 9.5], "texture": "#0"}, + "up": {"uv": [1, 16, 0, 10], "texture": "#0"}, + "down": {"uv": [1, 10, 0, 16], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3.25], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "Bulky", + "origin": [-7, 26, -1], + "color": 0, + "children": [0, 1, 2] + }, + { + "name": "Base", + "origin": [8, 8, 8], + "color": 0, + "children": [3, 4] + } + ] +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/2x2_table_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/2x2_table_1.json new file mode 100644 index 0000000000..750a38017a --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/2x2_table_1.json @@ -0,0 +1,130 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [128, 128], + "textures": { + "0": "gm4_furniture:block/furniture/wood_set/spruce/2x2_table_1", + "particle": "gm4_furniture:block/furniture/wood_set/spruce/2x2_table_1" + }, + "elements": [ + { + "name": "front_leg", + "from": [5, 2, -5], + "to": [11, 14, -3], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 2, -5]}, + "faces": { + "north": {"uv": [8.25, 0, 9.75, 3], "texture": "#0"}, + "east": {"uv": [9, 5.25, 9.5, 8.25], "texture": "#0"}, + "south": {"uv": [10, 0, 11.5, 3], "texture": "#0"}, + "west": {"uv": [9, 5.25, 9.5, 8.25], "texture": "#0"}, + "up": {"uv": [11.25, 5.75, 9.75, 5.25], "texture": "#0"}, + "down": {"uv": [11.25, 5.25, 9.75, 5.75], "texture": "#0"} + } + }, + { + "name": "back_leg", + "from": [5, 2, 19], + "to": [11, 14, 21], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 0, 19]}, + "faces": { + "north": {"uv": [8.25, 0, 9.75, 3], "texture": "#0"}, + "east": {"uv": [9, 5.25, 9.5, 8.25], "texture": "#0"}, + "south": {"uv": [10, 0, 11.5, 3], "texture": "#0"}, + "west": {"uv": [9, 5.25, 9.5, 8.25], "texture": "#0"}, + "up": {"uv": [11.25, 5.75, 9.75, 5.25], "texture": "#0"}, + "down": {"uv": [11.25, 5.25, 9.75, 5.75], "texture": "#0"} + } + }, + { + "name": "support_beam", + "from": [7, 6, -6], + "to": [9, 8, 22], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 6, 24]}, + "faces": { + "north": {"uv": [0.25, 9.75, 0.75, 10.25], "texture": "#0"}, + "east": {"uv": [1, 9.75, 8, 10.25], "texture": "#0"}, + "south": {"uv": [0.25, 9.75, 0.75, 10.25], "texture": "#0"}, + "west": {"uv": [1, 9.75, 8, 10.25], "texture": "#0"}, + "up": {"uv": [8.75, 10.25, 8.25, 3.25], "texture": "#0"}, + "down": {"uv": [8.75, 3.25, 8.25, 10.25], "texture": "#0"} + } + }, + { + "name": "top", + "from": [-8, 14, -8], + "to": [24, 16, 24], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 14, -8]}, + "faces": { + "north": {"uv": [0, 8.25, 8, 8.75], "texture": "#0"}, + "east": {"uv": [0, 9, 8, 9.5], "texture": "#0"}, + "south": {"uv": [0, 8.25, 8, 8.75], "texture": "#0"}, + "west": {"uv": [0, 9, 8, 9.5], "texture": "#0"}, + "up": {"uv": [8, 8, 0, 0], "texture": "#0"}, + "down": {"uv": [8, 0, 0, 8], "texture": "#0"} + } + }, + { + "name": "front_foot", + "from": [-1, 0, -6], + "to": [17, 2, -2], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 0, -5.5]}, + "faces": { + "north": {"uv": [9, 4.5, 13.5, 5], "texture": "#0"}, + "east": {"uv": [13.75, 4.5, 14.75, 5], "texture": "#0"}, + "south": {"uv": [9, 4.5, 13.5, 5], "texture": "#0"}, + "west": {"uv": [13.75, 4.5, 14.75, 5], "texture": "#0"}, + "up": {"uv": [13.5, 4.25, 9, 3.25], "texture": "#0"}, + "down": {"uv": [13.5, 3.25, 9, 4.25], "texture": "#0"} + } + }, + { + "name": "back_foot", + "from": [-1, 0, 18], + "to": [17, 2, 22], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 19.5]}, + "faces": { + "north": {"uv": [9, 4.5, 13.5, 5], "texture": "#0"}, + "east": {"uv": [13.75, 4.5, 14.75, 5], "texture": "#0"}, + "south": {"uv": [9, 4.5, 13.5, 5], "texture": "#0"}, + "west": {"uv": [13.75, 4.5, 14.75, 5], "texture": "#0"}, + "up": {"uv": [13.5, 4.25, 9, 3.25], "texture": "#0"}, + "down": {"uv": [13.5, 3.25, 9, 4.25], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.75, 0], + "scale": [0.1875, 0.1875, 0.1875] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.75, 0], + "scale": [0.1875, 0.1875, 0.1875] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.2, 0.2, 0.2] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "scale": [0.2, 0.2, 0.2] + }, + "ground": { + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "translation": [0, -2, 0], + "scale": [0.3125, 0.3125, 0.3125] + }, + "head": { + "translation": [-8, 0, 8] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3.25], + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/bench_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/bench_1.json new file mode 100644 index 0000000000..e035a8b44e --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/bench_1.json @@ -0,0 +1,293 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "gm4_furniture:block/furniture/wood_set/spruce/bench_1", + "particle": "gm4_furniture:block/furniture/wood_set/spruce/bench_1" + }, + "elements": [ + { + "name": "Right_Divider", + "from": [-4, 8, 13], + "to": [-2, 23, 14.9], + "rotation": {"angle": 0, "axis": "y", "origin": [-4, 15, 13]}, + "faces": { + "north": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "east": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "south": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "west": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "up": {"uv": [21, 1, 20.5, 0.5], "texture": "#0"}, + "down": {"uv": [16, 15.5, 15.5, 16], "texture": "#0"} + } + }, + { + "name": "Middle_Divider", + "from": [7, 8, 13], + "to": [9, 23, 14.9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 15, 13]}, + "faces": { + "north": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "east": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "south": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "west": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "up": {"uv": [16, 16, 15.5, 15.5], "texture": "#0"}, + "down": {"uv": [16, 15.5, 15.5, 16], "texture": "#0"} + } + }, + { + "name": "Left_divider", + "from": [18, 8, 13], + "to": [20, 23, 14.9], + "rotation": {"angle": 0, "axis": "y", "origin": [18, 15, 13]}, + "faces": { + "north": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "east": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "south": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "west": {"uv": [11.25, 1.5, 11.75, 5.25], "texture": "#0"}, + "up": {"uv": [21.75, 0.75, 21.25, 0.25], "texture": "#0"}, + "down": {"uv": [16, 15.5, 15.5, 16], "texture": "#0"} + } + }, + { + "name": "Leg_Front_Left", + "from": [29, 0, 1], + "to": [31, 13, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [29, 0, 1]}, + "faces": { + "north": {"uv": [11.25, 4.75, 11.75, 8], "texture": "#0"}, + "east": {"uv": [11.25, 4.75, 11.75, 8], "texture": "#0"}, + "south": {"uv": [11.25, 4.75, 11.75, 8], "texture": "#0"}, + "west": {"uv": [11.25, 4.75, 11.75, 8], "texture": "#0"}, + "up": {"uv": [16, 16, 15.5, 15.5], "texture": "#0"}, + "down": {"uv": [12.5, 4.75, 12, 5.25], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Left", + "from": [29, 0, 13], + "to": [31, 26, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [29, 0, 13]}, + "faces": { + "north": {"uv": [11.25, 1.5, 11.75, 8], "texture": "#0"}, + "east": {"uv": [11.25, 1.5, 11.75, 8], "texture": "#0"}, + "south": {"uv": [11.25, 1.5, 11.75, 8], "texture": "#0"}, + "west": {"uv": [11.25, 1.5, 11.75, 8], "texture": "#0"}, + "up": {"uv": [12.5, 5.25, 12, 4.75], "texture": "#0"}, + "down": {"uv": [12.5, 4.75, 12, 5.25], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Right", + "from": [-15, 0, 13], + "to": [-13, 26, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [-15, 0, 13]}, + "faces": { + "north": {"uv": [11.25, 1.5, 11.75, 8], "texture": "#0"}, + "east": {"uv": [11.25, 1.5, 11.75, 8], "texture": "#0"}, + "south": {"uv": [11.25, 1.5, 11.75, 8], "texture": "#0"}, + "west": {"uv": [11.25, 1.5, 11.75, 8], "texture": "#0"}, + "up": {"uv": [12.5, 5.25, 12, 4.75], "texture": "#0"}, + "down": {"uv": [12.5, 4.75, 12, 5.25], "texture": "#0"} + } + }, + { + "name": "Leg_Front_Right", + "from": [-15, 0, 1], + "to": [-13, 13, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [-15, 0, 1]}, + "faces": { + "north": {"uv": [11.25, 4.75, 11.75, 8], "texture": "#0"}, + "east": {"uv": [11.25, 4.75, 11.75, 8], "texture": "#0"}, + "south": {"uv": [11.25, 4.75, 11.75, 8], "texture": "#0"}, + "west": {"uv": [11.25, 4.75, 11.75, 8], "texture": "#0"}, + "up": {"uv": [16, 16, 15.5, 15.5], "texture": "#0"}, + "down": {"uv": [12.5, 4.75, 12, 5.25], "texture": "#0"} + } + }, + { + "name": "Bottom_panel_yes", + "from": [-14, 2, 2], + "to": [30, 6, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 2]}, + "faces": { + "north": {"uv": [0, 8.75, 11, 9.75], "texture": "#0"}, + "east": {"uv": [8, 8.75, 11, 9.75], "texture": "#0"}, + "south": {"uv": [0, 8.75, 11, 9.75], "texture": "#0"}, + "west": {"uv": [8, 8.75, 11, 9.75], "texture": "#0"}, + "up": {"uv": [14.75, 1.25, 13.5, 0], "texture": "#0"}, + "down": {"uv": [14.75, 0, 13.5, 1.25], "texture": "#0"} + } + }, + { + "name": "back_panel", + "from": [-13, 8, 14], + "to": [29, 23, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 14]}, + "faces": { + "north": {"uv": [0, 0, 10.5, 3.75], "texture": "#0"}, + "east": {"uv": [13.5, 22, 13.5, 26.25], "texture": "#0"}, + "south": {"uv": [0, 0, 10.5, 3.75], "texture": "#0"}, + "west": {"uv": [13.75, 22, 13.75, 26.25], "texture": "#0"}, + "up": {"uv": [10.5, 10.75, 0, 10.75], "texture": "#0"}, + "down": {"uv": [10.5, 10.75, 0, 10.75], "texture": "#0"} + } + }, + { + "name": "bottom_panel_no", + "from": [30, 6, 14], + "to": [-14, 2, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [26, 0.5, 12]}, + "faces": { + "north": {"uv": [0, 8.75, 11, 9.75], "texture": "#0"}, + "east": {"uv": [8, 8.75, 11, 9.75], "texture": "#0"}, + "south": {"uv": [0, 8.75, 11, 9.75], "texture": "#0"}, + "west": {"uv": [8, 8.75, 11, 9.75], "texture": "#0"}, + "up": {"uv": [16, 16, 14.75, 15], "texture": "#0"}, + "down": {"uv": [16, 15, 14.75, 16], "texture": "#0"} + } + }, + { + "name": "Right_Panel", + "from": [-14, 8, 3], + "to": [-14, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-16, 3, 5]}, + "faces": { + "north": {"uv": [14, 4, 14, 5.25], "texture": "#0"}, + "east": {"uv": [10.75, 0, 13.25, 1.25], "texture": "#0"}, + "south": {"uv": [15, 4, 15, 5.25], "texture": "#0"}, + "west": {"uv": [10.75, 0, 13.25, 1.25], "texture": "#0"}, + "up": {"uv": [16, 16, 16, 13.5], "texture": "#0"}, + "down": {"uv": [16, 13.5, 16, 16], "texture": "#0"} + } + }, + { + "name": "Left_Panel", + "from": [30, 8, 3], + "to": [30, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [28, 3, 5]}, + "faces": { + "north": {"uv": [23, 22.25, 23, 23.5], "texture": "#0"}, + "east": {"uv": [10.75, 0, 13.25, 1.25], "texture": "#0"}, + "south": {"uv": [16, 14.75, 16, 16], "texture": "#0"}, + "west": {"uv": [10.75, 0, 13.25, 1.25], "texture": "#0"}, + "up": {"uv": [16, 16, 16, 13.5], "texture": "#0"}, + "down": {"uv": [16, 13.5, 16, 16], "texture": "#0"} + } + }, + { + "name": "top_panel_rim", + "from": [-13, 23, 13], + "to": [29, 25, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 23, 13]}, + "faces": { + "north": {"uv": [0, 10.5, 10.5, 10], "texture": "#0"}, + "east": {"uv": [15.5, 15.5, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 10, 10.5, 10.5], "texture": "#0"}, + "west": {"uv": [15.5, 15.5, 16, 16], "texture": "#0"}, + "up": {"uv": [10.5, 10.5, 0, 10], "texture": "#0"}, + "down": {"uv": [10.5, 10, 0, 10.5], "texture": "#0"} + } + }, + { + "name": "left_arm_rest", + "from": [29, 13, 1], + "to": [31, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [29, 13, 13]}, + "faces": { + "north": {"uv": [12, 7, 12.5, 7.25], "texture": "#0"}, + "east": {"uv": [12, 7.5, 15, 7.75], "texture": "#0"}, + "south": {"uv": [15.5, 15.75, 16, 16], "texture": "#0"}, + "west": {"uv": [12, 7.5, 15, 7.75], "texture": "#0"}, + "up": {"uv": [12.5, 4.5, 12, 1.5], "texture": "#0"}, + "down": {"uv": [12.5, 1.5, 12, 4.5], "texture": "#0"} + } + }, + { + "name": "right_arm_rest", + "from": [-15, 13, 1], + "to": [-13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [-15, 13, 13]}, + "faces": { + "north": {"uv": [12, 7, 12.5, 7.25], "texture": "#0"}, + "east": {"uv": [12, 7.5, 15, 7.75], "texture": "#0"}, + "south": {"uv": [15.5, 15.75, 16, 16], "texture": "#0"}, + "west": {"uv": [12, 7.5, 15, 7.75], "texture": "#0"}, + "up": {"uv": [12.5, 4.5, 12, 1.5], "texture": "#0"}, + "down": {"uv": [12.5, 1.5, 12, 4.5], "texture": "#0"} + } + }, + { + "name": "flat_seat", + "from": [-14, 6, 0], + "to": [30, 8, 14.9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 0]}, + "faces": { + "north": {"uv": [0, 8, 11, 8.5], "texture": "#0"}, + "east": {"uv": [11.25, 8, 15, 8.5], "texture": "#0"}, + "south": {"uv": [0, 8, 11, 8.5], "texture": "#0"}, + "west": {"uv": [11.25, 8, 15, 8.5], "texture": "#0"}, + "up": {"uv": [11, 7.75, 0, 4], "texture": "#0"}, + "down": {"uv": [11, 4, 0, 7.75], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 1.75, 0], + "scale": [0.1875, 0.1875, 0.1875] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 1.75, 0], + "scale": [0.1875, 0.1875, 0.1875] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "scale": [0.3125, 0.3125, 0.3125] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0.5, -3.25], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "back_panel_dividers", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2] + }, + { + "name": "Legs", + "origin": [8, 8, 8], + "color": 0, + "children": [3, 4, 5, 6] + }, + { + "name": "Panels", + "origin": [8, 8, 8], + "color": 0, + "children": [7, 8, 9, 10, 11] + }, + { + "name": "Toppers_rims", + "origin": [8, 8, 8], + "color": 0, + "children": [12, 13, 14] + }, + 15 + ] +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/chair_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/chair_1.json new file mode 100644 index 0000000000..72589a993e --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/chair_1.json @@ -0,0 +1,247 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/wood_set/spruce/chair_1", + "particle": "gm4_furniture:block/furniture/wood_set/spruce/chair_1" + }, + "elements": [ + { + "name": "Leg_Front_Left", + "from": [13, 0, 1], + "to": [15, 13, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 0, 1]}, + "faces": { + "north": {"uv": [14.5, 6.5, 15.5, 13], "texture": "#0"}, + "east": {"uv": [14.5, 6.5, 15.5, 13], "texture": "#0"}, + "south": {"uv": [14.5, 6.5, 15.5, 13], "texture": "#0"}, + "west": {"uv": [14.5, 6.5, 15.5, 13], "texture": "#0"}, + "up": {"uv": [15.5, 15.5, 14.5, 14.5], "texture": "#0"}, + "down": {"uv": [15.5, 13.5, 14.5, 14.5], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Left", + "from": [13, 0, 13], + "to": [15, 26, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 0, 13]}, + "faces": { + "north": {"uv": [14.5, 0, 15.5, 13], "texture": "#0"}, + "east": {"uv": [14.5, 0, 15.5, 13], "texture": "#0"}, + "south": {"uv": [14.5, 0, 15.5, 13], "texture": "#0"}, + "west": {"uv": [14.5, 0, 15.5, 13], "texture": "#0"}, + "up": {"uv": [15.5, 14.5, 14.5, 13.5], "texture": "#0"}, + "down": {"uv": [15.5, 13.5, 14.5, 14.5], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Right", + "from": [1, 0, 13], + "to": [3, 26, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 13]}, + "faces": { + "north": {"uv": [14.5, 0, 15.5, 13], "texture": "#0"}, + "east": {"uv": [14.5, 0, 15.5, 13], "texture": "#0"}, + "south": {"uv": [14.5, 0, 15.5, 13], "texture": "#0"}, + "west": {"uv": [14.5, 0, 15.5, 13], "texture": "#0"}, + "up": {"uv": [15.5, 14.5, 14.5, 13.5], "texture": "#0"}, + "down": {"uv": [15.5, 13.5, 14.5, 14.5], "texture": "#0"} + } + }, + { + "name": "Leg_Front_Right", + "from": [1, 0, 1], + "to": [3, 13, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 1]}, + "faces": { + "north": {"uv": [14.5, 6.5, 15.5, 13], "texture": "#0"}, + "east": {"uv": [14.5, 6.5, 15.5, 13], "texture": "#0"}, + "south": {"uv": [14.5, 6.5, 15.5, 13], "texture": "#0"}, + "west": {"uv": [14.5, 6.5, 15.5, 13], "texture": "#0"}, + "up": {"uv": [15.5, 15.5, 14.5, 14.5], "texture": "#0"}, + "down": {"uv": [15.5, 13.5, 14.5, 14.5], "texture": "#0"} + } + }, + { + "name": "back_panel", + "from": [3, 8, 14], + "to": [13, 23, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 14]}, + "faces": { + "north": {"uv": [0, 8, 5, 15.5], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 7.5], "texture": "#0"}, + "south": {"uv": [0, 8, 5, 15.5], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 7.5], "texture": "#0"}, + "up": {"uv": [5, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [5, 0, 0, 0], "texture": "#0"} + } + }, + { + "name": "Bottom_Yes", + "from": [2, 2, 2], + "to": [14, 6, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [22, 4, 2]}, + "faces": { + "north": {"uv": [6.5, 1.5, 12.5, 3.5], "texture": "#0"}, + "east": {"uv": [6.5, 1.5, 12.5, 3.5], "texture": "#0"}, + "south": {"uv": [6.5, 1.5, 12.5, 3.5], "texture": "#0"}, + "west": {"uv": [6.5, 1.5, 12.5, 3.5], "texture": "#0"}, + "up": {"uv": [11.5, 15.5, 5.5, 9.5], "texture": "#0"}, + "down": {"uv": [11.5, 9.5, 5.5, 15.5], "texture": "#0"} + } + }, + { + "name": "Left_Panel", + "from": [14, 8, 3], + "to": [14, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 3, 5]}, + "faces": { + "north": {"uv": [0, 0, 0, 2.5], "texture": "#0"}, + "east": {"uv": [6.5, 4, 11.5, 6.5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2.5], "texture": "#0"}, + "west": {"uv": [6.5, 4, 11.5, 6.5], "texture": "#0"}, + "up": {"uv": [0, 5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 5], "texture": "#0"} + } + }, + { + "name": "Right_Panel", + "from": [2, 8, 3], + "to": [2, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 3, 5]}, + "faces": { + "north": {"uv": [0, 0, 0, 2.5], "texture": "#0"}, + "east": {"uv": [6.5, 4, 11.5, 6.5], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 2.5], "texture": "#0"}, + "west": {"uv": [6.5, 4, 11.5, 6.5], "texture": "#0"}, + "up": {"uv": [0, 5, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 5], "texture": "#0"} + } + }, + { + "name": "Bottom_No", + "from": [14, 6, 14], + "to": [2, 2, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 6, 14]}, + "faces": { + "north": {"uv": [6.5, 1.5, 12.5, 3.5], "texture": "#0"}, + "east": {"uv": [6.5, 1.5, 12.5, 3.5], "texture": "#0"}, + "south": {"uv": [6.5, 1.5, 12.5, 3.5], "texture": "#0"}, + "west": {"uv": [6.5, 1.5, 12.5, 3.5], "texture": "#0"}, + "up": {"uv": [11.5, 15.5, 5.5, 9.5], "texture": "#0"}, + "down": {"uv": [11.5, 9.5, 5.5, 15.5], "texture": "#0"} + } + }, + { + "name": "top_panel_rim", + "from": [3, 23, 13], + "to": [13, 25, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 23, 13]}, + "faces": { + "north": {"uv": [5.5, 8, 10.5, 9], "texture": "#0"}, + "east": {"uv": [14.5, 14.5, 15.5, 15.5], "texture": "#0"}, + "south": {"uv": [5.5, 8, 10.5, 9], "texture": "#0"}, + "west": {"uv": [14.5, 14.5, 15.5, 15.5], "texture": "#0"}, + "up": {"uv": [10.5, 9, 5.5, 8], "texture": "#0"}, + "down": {"uv": [10.5, 8, 5.5, 9], "texture": "#0"} + } + }, + { + "name": "left_arm_rest", + "from": [13, 13, 1], + "to": [15, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 13, 13]}, + "faces": { + "north": {"uv": [13, 8, 14, 8.5], "texture": "#0"}, + "east": {"uv": [6.5, 7, 12.5, 7.5], "texture": "#0"}, + "south": {"uv": [13, 8.5, 14, 9], "texture": "#0"}, + "west": {"uv": [6.5, 7, 12.5, 7.5], "texture": "#0"}, + "up": {"uv": [14, 7.5, 13, 1.5], "texture": "#0"}, + "down": {"uv": [14, 1.5, 13, 7.5], "texture": "#0"} + } + }, + { + "name": "right_arm_rest", + "from": [1, 13, 1], + "to": [3, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 13, 13]}, + "faces": { + "north": {"uv": [13, 8, 14, 8.5], "texture": "#0"}, + "east": {"uv": [6.5, 7, 12.5, 7.5], "texture": "#0"}, + "south": {"uv": [13, 8.5, 14, 9], "texture": "#0"}, + "west": {"uv": [6.5, 7, 12.5, 7.5], "texture": "#0"}, + "up": {"uv": [14, 7.5, 13, 1.5], "texture": "#0"}, + "down": {"uv": [14, 1.5, 13, 7.5], "texture": "#0"} + } + }, + { + "name": "flat_seat", + "from": [2, 6, 0], + "to": [14, 8, 14.9], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 0]}, + "faces": { + "north": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "east": {"uv": [6.5, 0, 14, 1], "texture": "#0"}, + "south": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "west": {"uv": [6.5, 0, 14, 1], "texture": "#0"}, + "up": {"uv": [6, 7.5, 0, 0], "texture": "#0"}, + "down": {"uv": [6, 0, 0, 7.5], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "translation": [0, -1.75, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "Legs", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "Panels", + "origin": [8, 8, 8], + "color": 0, + "children": [4, 5, 6, 7, 8] + }, + { + "name": "Toppers_rims", + "origin": [8, 8, 8], + "color": 0, + "children": [9, 10, 11] + }, + 12 + ] +} diff --git a/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/stool_1.json b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/stool_1.json new file mode 100644 index 0000000000..261483a00a --- /dev/null +++ b/gm4_furniture/assets/gm4_furniture/models/block/furniture/wood_set/spruce/stool_1.json @@ -0,0 +1,156 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "gm4_furniture:block/furniture/wood_set/spruce/stool_1", + "particle": "gm4_furniture:block/furniture/wood_set/spruce/stool_1" + }, + "elements": [ + { + "name": "Leg_Front_Left", + "from": [11, 0, 3], + "to": [13, 10, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 0, 3]}, + "faces": { + "north": {"uv": [6.5, 2, 7.5, 7], "texture": "#0"}, + "east": {"uv": [8, 2, 9, 7], "texture": "#0"}, + "south": {"uv": [6.5, 2, 7.5, 7], "texture": "#0"}, + "west": {"uv": [8, 2, 9, 7], "texture": "#0"}, + "up": {"uv": [10.5, 4.5, 9.5, 3.5], "texture": "#0"}, + "down": {"uv": [10.5, 2, 9.5, 3], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Left", + "from": [11, 0, 11], + "to": [13, 10, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 0, 11]}, + "faces": { + "north": {"uv": [6.5, 2, 7.5, 7], "texture": "#0"}, + "east": {"uv": [8, 2, 9, 7], "texture": "#0"}, + "south": {"uv": [6.5, 2, 7.5, 7], "texture": "#0"}, + "west": {"uv": [8, 2, 9, 7], "texture": "#0"}, + "up": {"uv": [10.5, 4.5, 9.5, 3.5], "texture": "#0"}, + "down": {"uv": [10.5, 2, 9.5, 3], "texture": "#0"} + } + }, + { + "name": "Leg_Back_Right", + "from": [3, 0, 11], + "to": [5, 10, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 0, 11]}, + "faces": { + "north": {"uv": [6.5, 2, 7.5, 7], "texture": "#0"}, + "east": {"uv": [8, 2, 9, 7], "texture": "#0"}, + "south": {"uv": [6.5, 2, 7.5, 7], "texture": "#0"}, + "west": {"uv": [8, 2, 9, 7], "texture": "#0"}, + "up": {"uv": [10.5, 4.5, 9.5, 3.5], "texture": "#0"}, + "down": {"uv": [10.5, 2, 9.5, 3], "texture": "#0"} + } + }, + { + "name": "Leg_Front_Right", + "from": [3, 0, 3], + "to": [5, 10, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 0, 3]}, + "faces": { + "north": {"uv": [6.5, 2, 7.5, 7], "texture": "#0"}, + "east": {"uv": [8, 2, 9, 7], "texture": "#0"}, + "south": {"uv": [6.5, 2, 7.5, 7], "texture": "#0"}, + "west": {"uv": [8, 2, 9, 7], "texture": "#0"}, + "up": {"uv": [10.5, 4.5, 9.5, 3.5], "texture": "#0"}, + "down": {"uv": [10.5, 2, 9.5, 3], "texture": "#0"} + } + }, + { + "name": "back_panel", + "from": [12, 11, 12], + "to": [4, 8, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [5, 9, 12]}, + "faces": { + "north": {"uv": [6.5, 0, 10.5, 1.5], "texture": "#0"}, + "east": {"uv": [6.5, 0, 10.5, 1.5], "texture": "#0"}, + "south": {"uv": [6.5, 0, 10.5, 1.5], "texture": "#0"}, + "west": {"uv": [6.5, 0, 10.5, 1.5], "texture": "#0"}, + "up": {"uv": [10, 11, 6, 7], "texture": "#0"}, + "down": {"uv": [10, 7, 6, 11], "texture": "#0"} + } + }, + { + "name": "Front_panel", + "from": [4, 7, 4], + "to": [12, 10, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [23, 8, 4]}, + "faces": { + "north": {"uv": [6.5, 0, 10.5, 1.5], "texture": "#0"}, + "east": {"uv": [6.5, 0, 10.5, 1.5], "texture": "#0"}, + "south": {"uv": [6.5, 0, 10.5, 1.5], "texture": "#0"}, + "west": {"uv": [6.5, 0, 10.5, 1.5], "texture": "#0"}, + "up": {"uv": [10, 11, 6, 7], "texture": "#0"}, + "down": {"uv": [10, 7, 6, 11], "texture": "#0"} + } + }, + { + "name": "top_seat", + "from": [2, 10, 2], + "to": [14, 12, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 10, 1]}, + "faces": { + "north": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "east": {"uv": [0, 8, 6, 9], "texture": "#0"}, + "south": {"uv": [0, 6.5, 6, 7.5], "texture": "#0"}, + "west": {"uv": [0, 8, 6, 9], "texture": "#0"}, + "up": {"uv": [6, 6, 0, 0], "texture": "#0"}, + "down": {"uv": [6, 0, 0, 6], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [-90, 0, 0], + "translation": [0, 0, -3.25], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "Legs", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + }, + { + "name": "Panels", + "origin": [8, 8, 8], + "color": 0, + "children": [4, 5] + }, + 6 + ] +} diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/desk_lamp.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/desk_lamp.png new file mode 100644 index 0000000000..3ce5ca99da Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/desk_lamp.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/foldable_chair.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/foldable_chair.png new file mode 100644 index 0000000000..4a31fe8dd6 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/foldable_chair.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/foldable_chair_gm4.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/foldable_chair_gm4.png new file mode 100644 index 0000000000..5286ee1a1c Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/foldable_chair_gm4.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/foldable_chair_old.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/foldable_chair_old.png new file mode 100644 index 0000000000..271f797671 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/foldable_chair_old.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/spotlight.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/spotlight.png new file mode 100644 index 0000000000..55fecb2950 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/spotlight.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/spotlight_off.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/spotlight_off.png new file mode 100644 index 0000000000..b8a2e80651 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/metal_set/iron/spotlight_off.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/misc/candle_wick_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/misc/candle_wick_1.png new file mode 100644 index 0000000000..313eb0f825 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/misc/candle_wick_1.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/lantern.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/lantern.png new file mode 100644 index 0000000000..51be9c34e7 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/lantern.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/lantern_big.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/lantern_big.png new file mode 100644 index 0000000000..f4a284cb6a Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/lantern_big.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/statues/chicken.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/statues/chicken.png new file mode 100644 index 0000000000..19442209ba Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/statues/chicken.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/statues/slime.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/statues/slime.png new file mode 100644 index 0000000000..49950c343e Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/stone_set/statues/slime.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/cherry/bench_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/cherry/bench_1.png new file mode 100644 index 0000000000..b8dcfce22c Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/cherry/bench_1.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/cherry/chair_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/cherry/chair_1.png new file mode 100644 index 0000000000..4e0728c5ae Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/cherry/chair_1.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/cherry/stool_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/cherry/stool_1.png new file mode 100644 index 0000000000..1e21fc0932 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/cherry/stool_1.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/1x1_table_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/1x1_table_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/1x1_table_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/1x1_table_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/2x2_table_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/2x2_table_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/2x2_table_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/2x2_table_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/bench_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/bench_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/bench_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/bench_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/chair_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/chair_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/chair_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/chair_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/light_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/light_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/light_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/light_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/stool_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/stool_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/fancy/stool_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/dark_oak/stool_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/1x1_table_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/1x1_table_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/1x1_table_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/1x1_table_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/2x2_table_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/2x2_table_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/2x2_table_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/2x2_table_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/bench_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/bench_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/bench_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/bench_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/chair_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/chair_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/chair_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/chair_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/light_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/light_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/light_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/light_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/stool_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/stool_1.png similarity index 100% rename from gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/plain/stool_1.png rename to gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/oak/stool_1.png diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/1x1_table_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/1x1_table_1.png new file mode 100644 index 0000000000..b58136b579 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/1x1_table_1.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/2x2_table_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/2x2_table_1.png new file mode 100644 index 0000000000..7dd0495adb Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/2x2_table_1.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/bench_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/bench_1.png new file mode 100644 index 0000000000..10aa287cb0 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/bench_1.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/chair_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/chair_1.png new file mode 100644 index 0000000000..725811b51d Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/chair_1.png differ diff --git a/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/stool_1.png b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/stool_1.png new file mode 100644 index 0000000000..aeb5e9bc64 Binary files /dev/null and b/gm4_furniture/assets/gm4_furniture/textures/block/furniture/wood_set/spruce/stool_1.png differ diff --git a/gm4_furniture/assets/model_data.yaml b/gm4_furniture/assets/model_data.yaml deleted file mode 100644 index f0598beafe..0000000000 --- a/gm4_furniture/assets/model_data.yaml +++ /dev/null @@ -1,5 +0,0 @@ -model_data: - - item: leather_horse_armor - reference: item/furniture/paintbrush - - item: [player_head, leather_horse_armor] - reference: block/furniture/furniture_station diff --git a/gm4_furniture/data/gm4_furniture/advancement/interact_with_furniture.json b/gm4_furniture/data/gm4_furniture/advancement/interact_with_furniture.json index efadab78f5..d05215d4b1 100644 --- a/gm4_furniture/data/gm4_furniture/advancement/interact_with_furniture.json +++ b/gm4_furniture/data/gm4_furniture/advancement/interact_with_furniture.json @@ -3,7 +3,21 @@ "interact_with_furniture": { "trigger": "minecraft:player_interacted_with_entity", "conditions": { - "player": [], + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "type_specific": { + "type": "minecraft:player", + "gamemode": [ + "survival", + "creative" + ] + } + } + } + ], "entity": [ { "condition": "minecraft:entity_properties", diff --git a/gm4_furniture/data/gm4_furniture/function/break/destroy.mcfunction b/gm4_furniture/data/gm4_furniture/function/break/destroy.mcfunction index 2bc59aecb2..7e471e7ec9 100644 --- a/gm4_furniture/data/gm4_furniture/function/break/destroy.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/break/destroy.mcfunction @@ -13,6 +13,9 @@ execute unless score $creative gm4_furniture_data matches 1 positioned ~-0.4999 # remove any furniture blocks that match the id execute as @e[type=interaction,tag=gm4_furniture,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id at @s run function gm4_furniture:break/remove_block +# kill item displays +execute as @e[type=item_display,tag=gm4_furniture,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id run kill @s + # if the broken furniture was a furniture station run some extra code execute if entity @s[tag=gm4_furniture.furniture_station] run function gm4_furniture:break/remove_furniture_station diff --git a/gm4_furniture/data/gm4_furniture/function/break/destroy_find_main.mcfunction b/gm4_furniture/data/gm4_furniture/function/break/destroy_find_main.mcfunction new file mode 100644 index 0000000000..0a0381b346 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/break/destroy_find_main.mcfunction @@ -0,0 +1,8 @@ +# destroy furniture from any interaction, targeting the main interaction +# @s = furniture's interaction interaction entity +# at @s +# run from main + +scoreboard players set $creative gm4_furniture_data 0 +scoreboard players operation $check_id gm4_furniture_id = @s gm4_furniture_id +execute as @e[type=interaction,tag=gm4_furniture.main,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id at @s run function gm4_furniture:break/destroy diff --git a/gm4_furniture/data/gm4_furniture/function/break/process_hit.mcfunction b/gm4_furniture/data/gm4_furniture/function/break/process_hit.mcfunction index c867d6d2f8..db372afa8b 100644 --- a/gm4_furniture/data/gm4_furniture/function/break/process_hit.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/break/process_hit.mcfunction @@ -4,7 +4,7 @@ # run from break/find_main # if player is holding the paintbrush instead grab the color and stop this function -execute if score $get_color gm4_furniture_data matches 1 if entity @s[tag=gm4_furniture.painted] run return run function gm4_furniture:break/get_color +execute if score $get_color gm4_furniture_data matches 1 if entity @s[tag=gm4_furniture.dyeable] run return run function gm4_furniture:break/get_color # check how much time has passed since the last hit (or ignore that if the player was in creative) execute store result score $hit gm4_furniture_last_hit run time query gametime diff --git a/gm4_furniture/data/gm4_furniture/function/break/remove_block.mcfunction b/gm4_furniture/data/gm4_furniture/function/break/remove_block.mcfunction index 6d01fbb788..2e763b2ea1 100644 --- a/gm4_furniture/data/gm4_furniture/function/break/remove_block.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/break/remove_block.mcfunction @@ -5,5 +5,4 @@ execute positioned ~0.0001 ~0.5001 ~0.0001 run fill ~ ~ ~ ~ ~ ~ air replace #gm4_furniture:furniture_blocks[waterlogged=false] execute positioned ~0.0001 ~0.5001 ~0.0001 run fill ~ ~ ~ ~ ~ ~ water replace #gm4_furniture:furniture_blocks[waterlogged=true] -execute positioned ~-0.4999 ~0.0001 ~-0.4999 run kill @e[type=item_display,tag=gm4_furniture,dx=0,dy=0,dz=0,limit=1] kill @s diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/metal_set/gold.3_candelabra_1.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/metal_set/gold.3_candelabra_1.mcfunction new file mode 100644 index 0000000000..2a0f27ea1e --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/metal_set/gold.3_candelabra_1.mcfunction @@ -0,0 +1,15 @@ +# process candle right click event +# @s = interacted furniture's item display +# at @s +# run from interact/custom/resolve_function + +# attempt to light +execute if score $holding_lighter gm4_furniture_data matches 1 store success score $ignited_candle gm4_furniture_data \ + run data modify entity @s item.components merge value {"minecraft:item_model":"gm4_furniture:metal_set/gold/3_candelabra_1_lit","minecraft:custom_data":{gm4_furniture:{block_id:"light[level=13]"}}} +execute if score $ignited_candle gm4_furniture_data matches 0 unless score $offhand_candle_igniter gm4_furniture_data matches 1 run return run scoreboard players reset $ignited_candle gm4_furniture_data +execute if score $ignited_candle gm4_furniture_data matches 1 run return run setblock ~ ~ ~ light[level=13] + +# extinguish +data modify entity @s item.components merge value {"minecraft:item_model":"gm4_furniture:metal_set/gold/3_candelabra_1","minecraft:custom_data":{gm4_furniture:{block_id:"light[level=0]"}}} +setblock ~ ~ ~ light[level=0] +playsound block.candle.extinguish block @a[distance=..16] diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/metal_set/iron.3_candelabra_1.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/metal_set/iron.3_candelabra_1.mcfunction new file mode 100644 index 0000000000..7edca8e453 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/metal_set/iron.3_candelabra_1.mcfunction @@ -0,0 +1,15 @@ +# process candle right click event +# @s = interacted furniture's item display +# at @s +# run from interact/custom/resolve_function + +# attempt to light +execute if score $holding_lighter gm4_furniture_data matches 1 store success score $ignited_candle gm4_furniture_data \ + run data modify entity @s item.components merge value {"minecraft:item_model":"gm4_furniture:metal_set/iron/3_candelabra_1_lit","minecraft:custom_data":{gm4_furniture:{block_id:"light[level=13]"}}} +execute if score $ignited_candle gm4_furniture_data matches 0 unless score $offhand_candle_igniter gm4_furniture_data matches 1 run return run scoreboard players reset $ignited_candle gm4_furniture_data +execute if score $ignited_candle gm4_furniture_data matches 1 run return run setblock ~ ~ ~ light[level=13] + +# extinguish +data modify entity @s item.components merge value {"minecraft:item_model":"gm4_furniture:metal_set/iron/3_candelabra_1","minecraft:custom_data":{gm4_furniture:{block_id:"light[level=0]"}}} +setblock ~ ~ ~ light[level=0] +playsound block.candle.extinguish block @a[distance=..16] diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/metal_set/iron.spotlight.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/metal_set/iron.spotlight.mcfunction new file mode 100644 index 0000000000..4c04aac019 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/metal_set/iron.spotlight.mcfunction @@ -0,0 +1,17 @@ +# process spotlight right click event +# @s = interacted furniture's item display +# at @s +# run from interact/custom/resolve_function + +execute store success score $lit gm4_furniture_data run data modify entity @s item.components."minecraft:custom_data".gm4_furniture.lit set value 0 +playsound block.dispenser.fail block @a[distance=..16] + +# turn off +execute if score $lit gm4_furniture_data matches 1 as @e[type=item_display,tag=gm4_furniture.display_2,distance=..1] if score @s gm4_furniture_id = $check_id gm4_furniture_id run data modify entity @s item.components."minecraft:item_model" set value "gm4_furniture:metal_set/iron/spotlight/off/lamp" +execute if score $lit gm4_furniture_data matches 1 as @e[type=item_display,tag=gm4_furniture.display_3,distance=..1] if score @s gm4_furniture_id = $check_id gm4_furniture_id run data modify entity @s item.components."minecraft:item_model" set value "gm4_furniture:metal_set/iron/spotlight/off/beam" +execute if score $lit gm4_furniture_data matches 1 run return 0 + +# turn on +data modify entity @s item.components."minecraft:custom_data".gm4_furniture.lit set value 1 +execute as @e[type=item_display,tag=gm4_furniture.display_2,distance=..1] if score @s gm4_furniture_id = $check_id gm4_furniture_id run data modify entity @s item.components."minecraft:item_model" set value "gm4_furniture:metal_set/iron/spotlight/default/lamp" +execute as @e[type=item_display,tag=gm4_furniture.display_3,distance=..1] if score @s gm4_furniture_id = $check_id gm4_furniture_id run data modify entity @s item.components."minecraft:item_model" set value "gm4_furniture:metal_set/iron/spotlight/default/beam" diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/find_igniter.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/find_igniter.mcfunction new file mode 100644 index 0000000000..1ba65f98cd --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/find_igniter.mcfunction @@ -0,0 +1,11 @@ +# finds igniter player used to light candle and processes the feedback +# @s = player who ignited candle +# at @s +# run from interact/detect + +scoreboard players reset $ignited_candle gm4_furniture_data + +execute if score $mainhand_candle_igniter gm4_furniture_data matches 1 if items entity @s weapon.mainhand fire_charge run function gm4_furniture:interact/custom/furniture/misc/candle/used_mainhand_fire_charge +execute if score $mainhand_candle_igniter gm4_furniture_data matches 1 if items entity @s weapon.mainhand flint_and_steel run function gm4_furniture:interact/custom/furniture/misc/candle/used_mainhand_flint_and_steel +execute if score $offhand_candle_igniter gm4_furniture_data matches 1 if items entity @s weapon.offhand fire_charge run function gm4_furniture:interact/custom/furniture/misc/candle/used_offhand_fire_charge +execute if score $offhand_candle_igniter gm4_furniture_data matches 1 if items entity @s weapon.offhand flint_and_steel run function gm4_furniture:interact/custom/furniture/misc/candle/used_offhand_flint_and_steel diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_mainhand_fire_charge.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_mainhand_fire_charge.mcfunction new file mode 100644 index 0000000000..cb9de4a317 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_mainhand_fire_charge.mcfunction @@ -0,0 +1,13 @@ +# mainhand fire charge use logic +# @s = player who ignited candle +# at @s +# run from interact/custom/furniture/misc/candle/find_igniter + +# sound +playsound minecraft:item.firecharge.use player @a[distance=..16] + +# return if creative +execute if entity @s[gamemode=creative] run return 1 + +# use item +item modify entity @s weapon.mainhand {function:"minecraft:set_count",count:-1,add:1b} diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_mainhand_flint_and_steel.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_mainhand_flint_and_steel.mcfunction new file mode 100644 index 0000000000..d8061991d5 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_mainhand_flint_and_steel.mcfunction @@ -0,0 +1,23 @@ +# calculates damage for mainhand flint and steel +# @s = player who ignited candle +# at @s +# run from interact/custom/furniture/misc/candle/find_igniter + +# sound +playsound minecraft:item.flintandsteel.use player @a[distance=..16] + +# return if creative +execute if entity @s[gamemode=creative] run return 1 + +# damage +execute store result score $unbreaking_level gm4_furniture_data run data get entity @s SelectedItem.components."minecraft:enchantments"."minecraft:unbreaking" +scoreboard players add $unbreaking_level gm4_furniture_data 1 +scoreboard players set $damage_chance gm4_furniture_data 100 +scoreboard players operation $damage_chance gm4_furniture_data /= $unbreaking_level gm4_furniture_data +execute store result score $rand gm4_furniture_data run random value 1..100 +execute if score $rand gm4_furniture_data < $damage_chance gm4_furniture_data run item modify entity @s weapon.mainhand {"function":"minecraft:set_damage","damage":-0.0205,"add":true} + +execute unless items entity @s weapon.mainhand flint_and_steel[damage=64] run return 1 +# 0 durability remaining, break item +item replace entity @s weapon.mainhand with air +playsound minecraft:entity.item.break player @a[distance=..16] diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_offhand_fire_charge.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_offhand_fire_charge.mcfunction new file mode 100644 index 0000000000..0f48552e35 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_offhand_fire_charge.mcfunction @@ -0,0 +1,13 @@ +# offhand fire charge use logic +# @s = player who ignited candle +# at @s +# run from interact/custom/furniture/misc/candle/find_igniter + +# sound +playsound minecraft:item.firecharge.use player @a[distance=..16] + +# return if creative +execute if entity @s[gamemode=creative] run return 1 + +# use item +item modify entity @s weapon.offhand {function:"minecraft:set_count",count:-1,add:1b} diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_offhand_flint_and_steel.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_offhand_flint_and_steel.mcfunction new file mode 100644 index 0000000000..36f05139b7 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/misc/candle/used_offhand_flint_and_steel.mcfunction @@ -0,0 +1,23 @@ +# calculates damage for offhand flint and steel +# @s = player who ignited candle +# at @s +# run from interact/custom/furniture/misc/candle/find_igniter + +# sound +playsound minecraft:item.flintandsteel.use player @a[distance=..16] + +# return if creative +execute if entity @s[gamemode=creative] run return 1 + +# damage +execute store result score $unbreaking_level gm4_furniture_data run data get entity @s equipment.offhand.components."minecraft:enchantments"."minecraft:unbreaking" +scoreboard players add $unbreaking_level gm4_furniture_data 1 +scoreboard players set $damage_chance gm4_furniture_data 100 +scoreboard players operation $damage_chance gm4_furniture_data /= $unbreaking_level gm4_furniture_data +execute store result score $rand gm4_furniture_data run random value 1..100 +execute if score $rand gm4_furniture_data < $damage_chance gm4_furniture_data run item modify entity @s weapon.offhand {"function":"minecraft:set_damage","damage":-0.0205,"add":true} + +execute unless items entity @s weapon.offhand flint_and_steel[damage=64] run return 1 +# 0 durability remaining, break item +item replace entity @s weapon.offhand with air +playsound minecraft:entity.item.break player @a[distance=..16] diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_allay.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.allay.mcfunction similarity index 85% rename from gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_allay.mcfunction rename to gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.allay.mcfunction index 504cf2eae2..6d48a98d69 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_allay.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.allay.mcfunction @@ -1,5 +1,5 @@ # 2% chance to play an animal sound -# @s = furniture's interacted interaction entity +# @s = interacted furniture's item display # at @s # run from interact/custom/resolve_function diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_axolotl.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.axolotl.mcfunction similarity index 63% rename from gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_axolotl.mcfunction rename to gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.axolotl.mcfunction index e72098445a..6cb7d19b8f 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_axolotl.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.axolotl.mcfunction @@ -1,7 +1,7 @@ # 2% chance to play an animal sound -# @s = furniture's interacted interaction entity +# @s = interacted furniture's item display # at @s # run from interact/custom/resolve_function -execute if predicate gm4_furniture:chance/animal_statue_sound run playsound entity.axolotl.idle_water block @a[distance=..16] ~ ~ ~ 1 0.95 +execute if predicate gm4_furniture:chance/animal_statue_sound run playsound entity.axolotl.idle_air block @a[distance=..16] ~ ~ ~ 1 0.95 scoreboard players set $interaction_processed gm4_furniture_data 1 diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_bee.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.bee.mcfunction similarity index 85% rename from gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_bee.mcfunction rename to gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.bee.mcfunction index 58f945547e..68a6ad5128 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_bee.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.bee.mcfunction @@ -1,5 +1,5 @@ # 2% chance to play an animal sound -# @s = furniture's interacted interaction entity +# @s = interacted furniture's item display # at @s # run from interact/custom/resolve_function diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.chicken.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.chicken.mcfunction new file mode 100644 index 0000000000..cac7a2d72e --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.chicken.mcfunction @@ -0,0 +1,7 @@ +# 2% chance to play an animal sound +# @s = interacted furniture's item display +# at @s +# run from interact/custom/resolve_function + +execute if predicate gm4_furniture:chance/animal_statue_sound run playsound entity.chicken.ambient block @a[distance=..16] ~ ~ ~ 1 0.95 +scoreboard players set $interaction_processed gm4_furniture_data 1 diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_frog.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.frog.mcfunction similarity index 85% rename from gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_frog.mcfunction rename to gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.frog.mcfunction index 89b0942fdb..e9d5cc8fec 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_frog.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.frog.mcfunction @@ -1,5 +1,5 @@ # 2% chance to play an animal sound -# @s = furniture's interacted interaction entity +# @s = interacted furniture's item display # at @s # run from interact/custom/resolve_function diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_pufferfish.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.pufferfish.mcfunction similarity index 67% rename from gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_pufferfish.mcfunction rename to gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.pufferfish.mcfunction index 090e1247ea..d3cd1c61f5 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues_pufferfish.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.pufferfish.mcfunction @@ -1,7 +1,7 @@ # 2% chance to play an animal sound -# @s = furniture's interacted interaction entity +# @s = interacted furniture's item display # at @s # run from interact/custom/resolve_function -execute if predicate gm4_furniture:chance/animal_statue_sound run playsound entity.puffer_fish.ambient block @a[distance=..16] ~ ~ ~ 1 0.95 +execute if predicate gm4_furniture:chance/animal_statue_sound run playsound entity.puffer_fish.blow_up block @a[distance=..16] ~ ~ ~ 1 0.95 scoreboard players set $interaction_processed gm4_furniture_data 1 diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.slime.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.slime.mcfunction new file mode 100644 index 0000000000..f195ee3efa --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/stone_set/statues.slime.mcfunction @@ -0,0 +1,7 @@ +# 2% chance to play an animal sound +# @s = interacted furniture's item display +# at @s +# run from interact/custom/resolve_function + +execute if predicate gm4_furniture:chance/animal_statue_sound run playsound entity.slime.squish block @a[distance=..16] ~ ~ ~ 1 0.95 +scoreboard players set $interaction_processed gm4_furniture_data 1 diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/wood_set/dark_oak.light_1.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/wood_set/dark_oak.light_1.mcfunction new file mode 100644 index 0000000000..91c9d104dc --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/wood_set/dark_oak.light_1.mcfunction @@ -0,0 +1,19 @@ +# toggle lamp on and off +# @s = interacted furniture's item display +# at @s +# run from interact/custom/resolve_function + +execute store success score $lit gm4_furniture_data if block ~ ~ ~ light[level=12] + +execute if score $lit gm4_furniture_data matches 1 run setblock ~ ~ ~ light[level=0] +execute if score $lit gm4_furniture_data matches 1 run data modify entity @s item.components merge value \ + {"minecraft:item_model":"gm4_furniture:wood_set/dark_oak/light_1","minecraft:custom_data":{gm4_furniture:{block_id:"light[level=0]"}}} + +execute if score $lit gm4_furniture_data matches 0 run setblock ~ ~ ~ light[level=12] +execute if score $lit gm4_furniture_data matches 0 run data modify entity @s item.components merge value \ + {"minecraft:item_model":"gm4_furniture:wood_set/dark_oak/light_1","minecraft:custom_data":{gm4_furniture:{block_id:"light[level=12]"}}} + +playsound block.dispenser.fail block @a[distance=..16] + +## NEEDS MODELS +# | One with emissive texture, one without diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/wood_set/oak.light_1.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/wood_set/oak.light_1.mcfunction new file mode 100644 index 0000000000..0ce0be10e9 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/furniture/wood_set/oak.light_1.mcfunction @@ -0,0 +1,15 @@ +# process candle right click event +# @s = interacted furniture's item display +# at @s +# run from interact/custom/resolve_function + +# attempt to light +execute if score $holding_lighter gm4_furniture_data matches 1 store success score $ignited_candle gm4_furniture_data \ + run data modify entity @s item.components merge value {"minecraft:item_model":"gm4_furniture:wood_set/oak/light_1_lit","minecraft:custom_data":{gm4_furniture:{block_id:"light[level=15]"}}} +execute if score $ignited_candle gm4_furniture_data matches 0 unless score $offhand_candle_igniter gm4_furniture_data matches 1 run return run scoreboard players reset $ignited_candle gm4_furniture_data +execute if score $ignited_candle gm4_furniture_data matches 1 run return run setblock ~ ~ ~ light[level=15] + +# extinguish +data modify entity @s item.components merge value {"minecraft:item_model":"gm4_furniture:wood_set/oak/light_1","minecraft:custom_data":{gm4_furniture:{block_id:"light[level=0]"}}} +setblock ~ ~ ~ light[level=0] +playsound block.candle.extinguish block @a[distance=..16] diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/process.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/process.mcfunction index c349f54e62..30024ae0b9 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/custom/process.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/process.mcfunction @@ -1,11 +1,10 @@ # process custom furniture interactions -# @s = furniture's interacted interaction entity +# @s = interacted furniture's item display # at @s -# run from interact/process +# run from interact/custom/select_item_display # find this furniture's item_display and store its furniture_id -scoreboard players operation $check_id gm4_furniture_id = @s gm4_furniture_id -execute as @e[type=item_display,tag=gm4_furniture.display,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id run data modify storage gm4_furniture:temp furniture_id set from entity @s item.components."minecraft:custom_data".gm4_furniture.furniture_id +data modify storage gm4_furniture:temp furniture_id set from entity @s item.components."minecraft:custom_data".gm4_furniture.furniture_id # resolve function call function gm4_furniture:interact/custom/resolve_function with storage gm4_furniture:temp data remove storage gm4_furniture:temp furniture_id diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/resolve_function.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/resolve_function.mcfunction index e71ed7186f..c10b1d6776 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/custom/resolve_function.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/resolve_function.mcfunction @@ -1,5 +1,5 @@ # resolve which furniture was interacted with -# @s = furniture's interacted interaction entity +# @s = interacted furniture's item display # at @s # run from interact/custom/process # with {furniture_id} diff --git a/gm4_furniture/data/gm4_furniture/function/interact/custom/select_item_display.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/custom/select_item_display.mcfunction new file mode 100644 index 0000000000..09fa6d748c --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/custom/select_item_display.mcfunction @@ -0,0 +1,7 @@ +# selects item display for interacted interaction entity +# @s = furniture's interacted interaction entity +# at @s +# run from interact/process + +# find this furniture's item_display +execute as @e[type=item_display,tag=gm4_furniture.display,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id at @s run function gm4_furniture:interact/custom/process diff --git a/gm4_furniture/data/gm4_furniture/function/interact/detect.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/detect.mcfunction index 2da973538f..4f0602b7de 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/detect.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/detect.mcfunction @@ -3,7 +3,16 @@ # at @s advancement revoke @s only gm4_furniture:interact_with_furniture +# item data +# | candle lighting +execute store result score $mainhand_candle_igniter gm4_furniture_data store result score $offhand_candle_igniter gm4_furniture_data run scoreboard players set $holding_lighter gm4_furniture_data 0 +execute if items entity @s weapon.mainhand #gm4_furniture:candle_igniters store result score $holding_lighter gm4_furniture_data run scoreboard players set $mainhand_candle_igniter gm4_furniture_data 1 +execute unless score $mainhand_candle_igniter gm4_furniture_data matches 1 if items entity @s weapon.offhand #gm4_furniture:candle_igniters store result score $holding_lighter gm4_furniture_data run scoreboard players set $offhand_candle_igniter gm4_furniture_data 1 + # find interaction entity that was interacted with tag @s add gm4_furniture_target execute as @e[type=interaction,tag=gm4_furniture,distance=..8] if data entity @s interaction at @s run function gm4_furniture:interact/process tag @s remove gm4_furniture_target + +# item use interactions +execute if score $ignited_candle gm4_furniture_data matches 1 run function gm4_furniture:interact/custom/furniture/misc/candle/find_igniter diff --git a/gm4_furniture/data/gm4_furniture/function/interact/furniture_station/swap_tool.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/furniture_station/swap_tool.mcfunction index 337f6ccd25..d3d142563f 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/furniture_station/swap_tool.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/furniture_station/swap_tool.mcfunction @@ -12,7 +12,6 @@ execute if entity @s[tag=gm4_furniture.prev] run scoreboard players remove @e[ty execute as @e[type=villager,tag=gm4_furniture.furniture_station,dx=0,dy=0,dz=0,limit=1] at @s run function gm4_furniture:technical/furniture_station/build_trades/prep # store new index on main interaction entity -scoreboard players operation $check_id gm4_furniture_id = @s gm4_furniture_id execute as @e[type=interaction,tag=gm4_furniture.main,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id run scoreboard players operation @s gm4_furniture_index = $store_index gm4_furniture_data # mark interaction as resolved diff --git a/gm4_furniture/data/gm4_furniture/function/interact/paint/detect.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/paint/detect.mcfunction index 8dea5783e7..bc919599a9 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/paint/detect.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/paint/detect.mcfunction @@ -1,9 +1,10 @@ # detect interaction on paintable furniture by a player holding a paintbrush -# @s = furniture's interacted interaction entity -# at @s +# @s = player holding paintbrush +# at furniture's interacted interaction entity # run from interact/process # store color from paintbrush and process application if there is some -data modify storage gm4_furniture:temp color set from entity @p[tag=gm4_furniture_target] SelectedItem.components."minecraft:dyed_color" +execute if predicate gm4_furniture:holding_paintbrush_offhand run data modify storage gm4_furniture:temp color set from entity @s equipment.offhand.components."minecraft:dyed_color" +execute if predicate gm4_furniture:holding_paintbrush_mainhand run data modify storage gm4_furniture:temp color set from entity @s SelectedItem.components."minecraft:dyed_color" execute if data storage gm4_furniture:temp color run function gm4_furniture:interact/paint/process data remove storage gm4_furniture:temp color diff --git a/gm4_furniture/data/gm4_furniture/function/interact/paint/process.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/paint/process.mcfunction index 74954bc9ff..47410dfef6 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/paint/process.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/paint/process.mcfunction @@ -1,14 +1,13 @@ # check if this furniture should be painted -# @s = furniture's interacted interaction entity -# at @s +# @s = player holding paintbrush +# at furniture's interacted interaction entity # run from interact/paint/detect # find this furniture's item_display and try to paint it -scoreboard players operation $check_id gm4_furniture_id = @s gm4_furniture_id scoreboard players set $paint_changed gm4_furniture_data 0 execute as @e[type=item_display,tag=gm4_furniture.display,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id store success score $paint_changed gm4_furniture_data run data modify entity @s item.components."minecraft:dyed_color" set from storage gm4_furniture:temp color # if furniture was painted mark interaction as resolved and play paint sound -execute if score $paint_changed gm4_furniture_data matches 1 run playsound item.dye.use player @a[distance=..8] ~ ~ ~ 1 1 -execute if score $paint_changed gm4_furniture_data matches 1 run scoreboard players set $interaction_processed gm4_furniture_data 1 -execute if score $paint_changed gm4_furniture_data matches 1 as @e[type=interaction,tag=gm4_furniture.main,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id run tag @s add gm4_furniture.painted +execute if score $paint_changed gm4_furniture_data matches 0 run return 1 +playsound item.dye.use player @a[distance=..8] ~ ~ ~ 1 1 +scoreboard players set $interaction_processed gm4_furniture_data 1 diff --git a/gm4_furniture/data/gm4_furniture/function/interact/process.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/process.mcfunction index d725e63068..24fa5349dd 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/process.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/process.mcfunction @@ -1,7 +1,20 @@ # process interacting (right-click) on furniture # @s = furniture's interacted interaction entity # at @s -# run from itneract/detect +# run from interact/detect + +# store time to check +execute store result score $gametime gm4_furniture_data run time query gametime +execute store result score $check_gametime gm4_furniture_data run data get entity @s interaction.timestamp 1 + +# clean +data remove entity @s interaction + +# fail if old interaction +execute unless score $gametime gm4_furniture_data = $check_gametime gm4_furniture_data run return fail + +# store interaction id +scoreboard players operation $check_id gm4_furniture_id = @s gm4_furniture_id # first successful interaction will be used, any lower down this list will be ignored scoreboard players set $interaction_processed gm4_furniture_data 0 @@ -10,19 +23,16 @@ scoreboard players set $interaction_processed gm4_furniture_data 0 execute if score $interaction_processed gm4_furniture_data matches 0 if entity @s[tag=gm4_furniture.reactivate] run function gm4_furniture:technical/furniture_station/activation/turn_active # check for waterlogging -execute if score $interaction_processed gm4_furniture_data matches 0 if entity @p[tag=gm4_furniture_target,predicate=gm4_furniture:holding_bucket] positioned ~ ~0.5 ~ run function gm4_furniture:interact/waterlog/check +execute if score $interaction_processed gm4_furniture_data matches 0 as @a[tag=gm4_furniture_target,predicate=gm4_furniture:holding_bucket,distance=..8,limit=1] positioned ~ ~0.5 ~ run function gm4_furniture:interact/waterlog/check # check for furniture station interactions execute if score $interaction_processed gm4_furniture_data matches 0 if entity @s[tag=gm4_furniture.swap_tool] align xyz run function gm4_furniture:interact/furniture_station/swap_tool # check for painting -execute if score $interaction_processed gm4_furniture_data matches 0 if entity @s[tag=gm4_furniture.dyable] if entity @p[tag=gm4_furniture_target,predicate=gm4_furniture:holding_paintbrush] run function gm4_furniture:interact/paint/detect +execute if score $interaction_processed gm4_furniture_data matches 0 if entity @s[tag=gm4_furniture.dyeable] as @a[tag=gm4_furniture_target,predicate=gm4_furniture:holding_paintbrush,distance=..8,limit=1] run function gm4_furniture:interact/paint/detect # check for sitting execute if score $interaction_processed gm4_furniture_data matches 0 if entity @s[scores={gm4_furniture_sit_height=1..}] if entity @p[tag=gm4_furniture_target,predicate=!gm4_furniture:is_sneaking] positioned ~-0.4999 ~0.0001 ~-0.4999 run function gm4_furniture:interact/sit/find_seat # check for custom interactions -execute if score $interaction_processed gm4_furniture_data matches 0 if entity @s[tag=gm4_furniture.custom_interaction] run function gm4_furniture:interact/custom/process - -# cleanup -data remove entity @s interaction +execute if score $interaction_processed gm4_furniture_data matches 0 if entity @s[tag=gm4_furniture.custom_interaction] run function gm4_furniture:interact/custom/select_item_display diff --git a/gm4_furniture/data/gm4_furniture/function/interact/waterlog/check.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/check.mcfunction index b3cc27cc81..9d92845868 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/waterlog/check.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/check.mcfunction @@ -1,7 +1,13 @@ # check if the furniture should waterlog or water-unlog -# @s = furniture's interacted interaction entity -# at @s +# @s = player holding bucket +# at furniture's interacted interaction entity # run from interact/process -execute if block ~ ~ ~ #gm4_furniture:furniture_blocks[waterlogged=true] if entity @p[tag=gm4_furniture_target,predicate=gm4_furniture:holding_empty_bucket] run function gm4_furniture:interact/waterlog/unlog -execute if score $interaction_processed gm4_furniture_data matches 0 if block ~ ~ ~ #gm4_furniture:furniture_blocks[waterlogged=false] if entity @p[tag=gm4_furniture_target,predicate=gm4_furniture:holding_water_bucket] run function gm4_furniture:interact/waterlog/log +# mainhand +scoreboard players set $mainhand_bucket gm4_furniture_data 1 +execute if block ~ ~ ~ #gm4_furniture:furniture_blocks[waterlogged=true] if items entity @s weapon.mainhand minecraft:bucket run function gm4_furniture:interact/waterlog/unlog +execute if score $interaction_processed gm4_furniture_data matches 0 if block ~ ~ ~ #gm4_furniture:furniture_blocks[waterlogged=false] if items entity @s weapon.mainhand minecraft:water_bucket run function gm4_furniture:interact/waterlog/log +# offhand +execute if score $interaction_processed gm4_furniture_data matches 0 run scoreboard players set $mainhand_bucket gm4_furniture_data 0 +execute if score $interaction_processed gm4_furniture_data matches 0 if block ~ ~ ~ #gm4_furniture:furniture_blocks[waterlogged=true] if items entity @s weapon.offhand minecraft:bucket run function gm4_furniture:interact/waterlog/unlog +execute if score $interaction_processed gm4_furniture_data matches 0 if block ~ ~ ~ #gm4_furniture:furniture_blocks[waterlogged=false] if items entity @s weapon.offhand minecraft:water_bucket run function gm4_furniture:interact/waterlog/log diff --git a/gm4_furniture/data/gm4_furniture/function/interact/waterlog/log.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/log.mcfunction index 647f7052f5..fa93bd7ddd 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/waterlog/log.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/log.mcfunction @@ -1,9 +1,10 @@ # waterlog this part of the furniture -# @s = furniture's interacted interaction entity -# at @s +# @s = player holding bucket +# at furniture's interacted interaction entity # run from interact/waterlog/check -item replace entity @p[tag=gm4_furniture_target,gamemode=!creative] weapon.mainhand with bucket +execute if score $mainhand_bucket gm4_furniture_data matches 1 run item replace entity @s[gamemode=!creative] weapon.mainhand with bucket +execute if score $mainhand_bucket gm4_furniture_data matches 0 run item replace entity @s[gamemode=!creative] weapon.offhand with bucket scoreboard players set $waterlog_completed gm4_furniture_data 0 execute store success score $waterlog_completed gm4_furniture_data run fill ~ ~ ~ ~ ~ ~ light[level=0,waterlogged=true] replace light[level=0] diff --git a/gm4_furniture/data/gm4_furniture/function/interact/waterlog/modify_mainhand.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/modify_mainhand.mcfunction new file mode 100644 index 0000000000..8462940669 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/modify_mainhand.mcfunction @@ -0,0 +1,10 @@ +# swap empty bucket for water bucket mainhand +# @s = player holding bucket +# at furniture's interacted interaction entity +# run from interact/waterlog/unlog + +execute if items entity @s weapon.mainhand bucket[count=1] run return run item replace entity @s[gamemode=!creative] weapon.mainhand with water_bucket + +# stacked buckets +item modify entity @s weapon.mainhand {function:"minecraft:set_count",count:-1,add:1b} +execute at @s run summon item ~ ~ ~ {Item:{id:"water_bucket",count:1}} diff --git a/gm4_furniture/data/gm4_furniture/function/interact/waterlog/modify_offhand.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/modify_offhand.mcfunction new file mode 100644 index 0000000000..ae72db04fd --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/modify_offhand.mcfunction @@ -0,0 +1,10 @@ +# swap empty bucket for water bucket offhand +# @s = player holding bucket +# at furniture's interacted interaction entity +# run from interact/waterlog/unlog + +execute if items entity @s weapon.offhand bucket[count=1] run return run item replace entity @s[gamemode=!creative] weapon.offhand with water_bucket + +# stacked buckets +item modify entity @s weapon.offhand {function:"minecraft:set_count",count:-1,add:1b} +execute at @s run summon item ~ ~ ~ {Item:{id:"water_bucket",count:1}} diff --git a/gm4_furniture/data/gm4_furniture/function/interact/waterlog/unlog.mcfunction b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/unlog.mcfunction index 64b0f25b3d..c8bead4204 100644 --- a/gm4_furniture/data/gm4_furniture/function/interact/waterlog/unlog.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/interact/waterlog/unlog.mcfunction @@ -1,9 +1,10 @@ # water-unlog this part of the furniture -# @s = furniture's interacted interaction entity -# at @s +# @s = player holding bucket +# at furniture's interacted interaction entity # run from interact/waterlog/check -item replace entity @p[tag=gm4_furniture_target,gamemode=!creative] weapon.mainhand with water_bucket +execute if score $mainhand_bucket gm4_furniture_data matches 1 run function gm4_furniture:interact/waterlog/modify_mainhand +execute if score $mainhand_bucket gm4_furniture_data matches 0 run function gm4_furniture:interact/waterlog/modify_offhand scoreboard players set $waterlog_completed gm4_furniture_data 0 execute store success score $waterlog_completed gm4_furniture_data run fill ~ ~ ~ ~ ~ ~ light[level=0,waterlogged=false] replace light[level=0,waterlogged=true] diff --git a/gm4_furniture/data/gm4_furniture/function/main.mcfunction b/gm4_furniture/data/gm4_furniture/function/main.mcfunction index 05764dfa39..0b51d92c9c 100644 --- a/gm4_furniture/data/gm4_furniture/function/main.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/main.mcfunction @@ -6,3 +6,5 @@ execute as @e[type=interaction,tag=gm4_furniture.on_ceiling] at @s if block ^ ^1 # break if wither nearby furniture execute as @e[type=wither] unless data entity @s NoAI if data entity @s {Invul:0} \ at @s as @e[type=interaction,tag=gm4_furniture.main,distance=..3] at @s run function gm4_furniture:break/lost_connection +# break if non-furniture block inside furniture +execute as @e[type=interaction,tag=gm4_furniture.interaction] at @s unless block ~ ~0.1 ~ #gm4_furniture:furniture_blocks run function gm4_furniture:break/destroy_find_main diff --git a/gm4_furniture/data/gm4_furniture/function/place/custom/furniture/metal_set/iron.spotlight.mcfunction b/gm4_furniture/data/gm4_furniture/function/place/custom/furniture/metal_set/iron.spotlight.mcfunction new file mode 100644 index 0000000000..7b0034d9b7 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/place/custom/furniture/metal_set/iron.spotlight.mcfunction @@ -0,0 +1,19 @@ +# custom placement +# @s = player who placed the furniture player head +# at the center of the placed block rotated along axis to face towards player or away from the wall +# run from place/furniture/metal_set/iron.spotlight (generated) + +# set main display to base +data modify entity @n[type=item_display,tag=gm4_new_furniture,tag=gm4_furniture.display,limit=1,distance=..1] item.components merge value {"minecraft:item_model":"gm4_furniture:metal_set/iron/spotlight/default/base","custom_data":{gm4_furniture:{lit:1}}} + +# summon additional displays +# | if not sneaking face player +execute unless predicate gm4_furniture:is_sneaking run summon item_display ~ ~0.0625 ~ {Tags:["gm4_furniture","gm4_furniture.additional_display","gm4_furniture.display_2","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.metal_set.iron.spotlight_lamp",item:{id:"leather_horse_armor",count:1,components:{"minecraft:item_model":"gm4_furniture:metal_set/iron/spotlight/default/lamp"}},item_display:head,transformation:{left_rotation:[0.707f,0f,0f,0.707f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,0f],scale:[1.0f,1.0f,1.0f]}} +execute unless predicate gm4_furniture:is_sneaking run summon item_display ~ ~0.0625 ~ {Tags:["gm4_furniture","gm4_furniture.additional_display","gm4_furniture.display_3","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.metal_set.iron.spotlight_beam",item:{id:"leather_horse_armor",count:1,components:{"minecraft:item_model":"gm4_furniture:metal_set/iron/spotlight/default/beam"}},item_display:head,transformation:{left_rotation:[0.707f,0f,0f,0.707f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,0.6875f],scale:[5.33f,5.33f,5.33f]}} +# | if sneaking face away from player +execute if predicate gm4_furniture:is_sneaking run summon item_display ~ ~0.0625 ~ {Tags:["gm4_furniture","gm4_furniture.additional_display","gm4_furniture.display_2","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.metal_set.iron.spotlight_lamp",item:{id:"leather_horse_armor",count:1,components:{"minecraft:item_model":"gm4_furniture:metal_set/iron/spotlight/default/lamp"}},item_display:head,transformation:{left_rotation:[-0.707f,0f,0f,0.707f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,0f],scale:[1.0f,1.0f,1.0f]}} +execute if predicate gm4_furniture:is_sneaking run summon item_display ~ ~0.0625 ~ {Tags:["gm4_furniture","gm4_furniture.additional_display","gm4_furniture.display_3","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.metal_set.iron.spotlight_beam",item:{id:"leather_horse_armor",count:1,components:{"minecraft:item_model":"gm4_furniture:metal_set/iron/spotlight/default/beam"}},item_display:head,transformation:{left_rotation:[-0.707f,0f,0f,0.707f],right_rotation:[0f,0f,0f,1f],translation:[0f,0f,-0.6875f],scale:[5.33f,5.33f,5.33f]}} + +# rotate +rotate @n[type=item_display,tag=gm4_furniture.display_2,tag=gm4_new_furniture,distance=..1] facing entity @s eyes +rotate @n[type=item_display,tag=gm4_furniture.display_3,tag=gm4_new_furniture,distance=..1] facing entity @s eyes diff --git a/gm4_furniture/data/gm4_furniture/function/place/custom/furniture/stone_set/lantern_2.mcfunction b/gm4_furniture/data/gm4_furniture/function/place/custom/furniture/stone_set/lantern_2.mcfunction new file mode 100644 index 0000000000..f77fd8168c --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/place/custom/furniture/stone_set/lantern_2.mcfunction @@ -0,0 +1,6 @@ +# custom placement +# @s = player who placed the furniture player head +# at the center of the placed block rotated along axis to face towards player or away from the wall +# run from place/furniture/stone_set/lantern_2 (generated) + +setblock ~ ~ ~ barrier diff --git a/gm4_furniture/data/gm4_furniture/function/place/custom/furniture/stone_set/lantern_big_1.mcfunction b/gm4_furniture/data/gm4_furniture/function/place/custom/furniture/stone_set/lantern_big_1.mcfunction new file mode 100644 index 0000000000..d92f6a08f6 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/place/custom/furniture/stone_set/lantern_big_1.mcfunction @@ -0,0 +1,7 @@ +# custom placement +# @s = player who placed the furniture player head +# at the center of the placed block rotated along axis to face towards player or away from the wall +# run from place/furniture/stone_set/lantern_big_1 (generated) + +setblock ~ ~ ~ barrier +setblock ~ ~1 ~ barrier diff --git a/gm4_furniture/data/gm4_furniture/function/place/furniture/furniture_station.mcfunction b/gm4_furniture/data/gm4_furniture/function/place/furniture/furniture_station.mcfunction index d9759e3a7b..8b877141b8 100644 --- a/gm4_furniture/data/gm4_furniture/function/place/furniture/furniture_station.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/place/furniture/furniture_station.mcfunction @@ -15,16 +15,16 @@ execute if score $valid_placement gm4_furniture_data matches 0 run loot spawn ~ execute if score $valid_placement gm4_furniture_data matches 0 run return run setblock ~ ~ ~ air # spawn the furniture_station -summon item_display ~ ~-0.4999 ~ {Tags:["gm4_furniture","gm4_furniture.display","gm4_furniture.furniture_station","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.furniture_station",item:{id:"leather_horse_armor",count:1,components:{"minecraft:custom_data":{gm4_furniture:{furniture_id:"furniture_station"}},"minecraft:custom_model_data":"block/furniture/furniture_station"}},item_display:head,Rotation:[0.0f,0.0f],transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0.5f,0f],scale:[1f,1f,1f]}} +summon item_display ~ ~-0.4999 ~ {Tags:["gm4_furniture","gm4_furniture.display","gm4_furniture.furniture_station","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.furniture_station",item:{id:"leather_horse_armor",count:1,components:{"minecraft:item_model":"gm4_furniture:furniture_station","minecraft:custom_data":{gm4_furniture:{furniture_id:"furniture_station"}}}},item_display:head,Rotation:[0.0f,0.0f],transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0.5f,0f],scale:[1f,1f,1f]}} summon interaction ~-0.0001 ~-0.5001 ~-0.0001 {Tags:["gm4_furniture","gm4_furniture.interaction","gm4_furniture.furniture_station","gm4_furniture.main","smithed.entity","smithed.strict","gm4_new_furniture"],height:1.0003f,width:1.0003f,response:1b} summon interaction ^0.25 ^-0.5 ^0.26 {Tags:["gm4_furniture","gm4_furniture.interaction","gm4_furniture.furniture_station","gm4_furniture.swap_tool","gm4_furniture.next","gm4_furniture.additional","smithed.entity","smithed.strict","gm4_new_furniture"],height:1f,width:0.5f,response:1b} summon interaction ^-0.25 ^-0.5 ^0.26 {Tags:["gm4_furniture","gm4_furniture.interaction","gm4_furniture.furniture_station","gm4_furniture.swap_tool","gm4_furniture.prev","gm4_furniture.additional","smithed.entity","smithed.strict","gm4_new_furniture"],height:1f,width:0.5f,response:1b} summon item_display ~ ~-0.4999 ~ {Tags:["gm4_furniture","gm4_furniture.furniture_station","gm4_furniture.tool","gm4_furniture.tool_main","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.furniture_station_tool",item:{id:"command_block",count:1},item_display:head,Rotation:[0.0f,0.0f],transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0.6f,0f],scale:[1f,1f,1f]}} summon item_display ~ ~-0.4999 ~ {Tags:["gm4_furniture","gm4_furniture.furniture_station","gm4_furniture.tool","gm4_furniture.tool_next","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.furniture_station_tool",item:{id:"command_block",count:1},item_display:head,Rotation:[0.0f,0.0f],transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0.28125f,-0.45312f,0.5f],scale:[1f,1f,1f]}} summon item_display ~ ~-0.4999 ~ {Tags:["gm4_furniture","gm4_furniture.furniture_station","gm4_furniture.tool","gm4_furniture.tool_prev","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.furniture_station_tool",item:{id:"command_block",count:1},item_display:head,Rotation:[0.0f,0.0f],transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[-0.28125f,-0.45312f,0.5f],scale:[1f,1f,1f]}} -data modify entity @e[type=item_display,tag=gm4_new_furniture,tag=gm4_furniture.tool_main,limit=1,distance=..2] item.components."minecraft:custom_model_data" set from storage gm4_furniture:data furniture_station[0]."minecraft:custom_model_data" -data modify entity @e[type=item_display,tag=gm4_new_furniture,tag=gm4_furniture.tool_next,limit=1,distance=..2] item.components."minecraft:custom_model_data" set from storage gm4_furniture:data furniture_station[1]."minecraft:custom_model_data" -data modify entity @e[type=item_display,tag=gm4_new_furniture,tag=gm4_furniture.tool_prev,limit=1,distance=..2] item.components."minecraft:custom_model_data" set from storage gm4_furniture:data furniture_station[-1]."minecraft:custom_model_data" +data modify entity @e[type=item_display,tag=gm4_new_furniture,tag=gm4_furniture.tool_main,limit=1,distance=..2] item.components."minecraft:item_model" set from storage gm4_furniture:data furniture_station[0]."minecraft:item_model" +data modify entity @e[type=item_display,tag=gm4_new_furniture,tag=gm4_furniture.tool_next,limit=1,distance=..2] item.components."minecraft:item_model" set from storage gm4_furniture:data furniture_station[1]."minecraft:item_model" +data modify entity @e[type=item_display,tag=gm4_new_furniture,tag=gm4_furniture.tool_prev,limit=1,distance=..2] item.components."minecraft:item_model" set from storage gm4_furniture:data furniture_station[-1]."minecraft:item_model" setblock ~ ~ ~ barrier # spawn villager diff --git a/gm4_furniture/data/gm4_furniture/function/place/replace_furniture_block.mcfunction b/gm4_furniture/data/gm4_furniture/function/place/replace_furniture_block.mcfunction new file mode 100644 index 0000000000..831ed1a277 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/function/place/replace_furniture_block.mcfunction @@ -0,0 +1,7 @@ +# replace blocks on furniture to stored block id from item display +# @s = furniture item display +# unspecified +# with {block_id} +# run from place/furniture/{set_name}/{row['technical_id']} (generated) + +$execute as @e[type=interaction,tag=gm4_furniture.interaction,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id at @s run setblock ~ ~0.1 ~ $(block_id) diff --git a/gm4_furniture/data/gm4_furniture/function/technical/furniture_station/activation/turn_active.mcfunction b/gm4_furniture/data/gm4_furniture/function/technical/furniture_station/activation/turn_active.mcfunction index d0671bce3d..dccbbdf32d 100644 --- a/gm4_furniture/data/gm4_furniture/function/technical/furniture_station/activation/turn_active.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/technical/furniture_station/activation/turn_active.mcfunction @@ -2,7 +2,7 @@ # @s = furniture reactivation interaction entity # at @s # run from interact/process -# run frin interact/furniture_station/swap_tool +# run from interact/furniture_station/swap_tool # turn tool upright execute align xyz run data merge entity @e[type=item_display,tag=gm4_furniture.tool_main,dx=0,dy=0,dz=0,limit=1] {interpolation_duration:5,start_interpolation:-1,transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0.6f,0f],scale:[1f,1f,1f]}} diff --git a/gm4_furniture/data/gm4_furniture/function/technical/furniture_station/build_trades/prep.mcfunction b/gm4_furniture/data/gm4_furniture/function/technical/furniture_station/build_trades/prep.mcfunction index 2ad7d14004..64657e2573 100644 --- a/gm4_furniture/data/gm4_furniture/function/technical/furniture_station/build_trades/prep.mcfunction +++ b/gm4_furniture/data/gm4_furniture/function/technical/furniture_station/build_trades/prep.mcfunction @@ -13,10 +13,10 @@ scoreboard players operation $trade_index gm4_furniture_data = @s gm4_furniture_ data modify storage gm4_furniture:temp trade_data set from storage gm4_furniture:data furniture_station execute if score $trade_index gm4_furniture_data matches 1.. run function gm4_furniture:technical/furniture_station/build_trades/get_trade_data -# change the displayed tools custom_model_data -execute align xyz run data modify entity @e[type=item_display,tag=gm4_furniture.tool_main,dx=0,dy=0,dz=0,limit=1] item.components."minecraft:custom_model_data" set from storage gm4_furniture:temp trade_data[0]."minecraft:custom_model_data" -execute align xyz run data modify entity @e[type=item_display,tag=gm4_furniture.tool_next,dx=0,dy=0,dz=0,limit=1] item.components."minecraft:custom_model_data" set from storage gm4_furniture:temp trade_data[1]."minecraft:custom_model_data" -execute align xyz run data modify entity @e[type=item_display,tag=gm4_furniture.tool_prev,dx=0,dy=0,dz=0,limit=1] item.components."minecraft:custom_model_data" set from storage gm4_furniture:temp trade_data[-1]."minecraft:custom_model_data" +# change the displayed tools item_model +execute align xyz run data modify entity @e[type=item_display,tag=gm4_furniture.tool_main,dx=0,dy=0,dz=0,limit=1] item.components."minecraft:item_model" set from storage gm4_furniture:temp trade_data[0]."minecraft:item_model" +execute align xyz run data modify entity @e[type=item_display,tag=gm4_furniture.tool_next,dx=0,dy=0,dz=0,limit=1] item.components."minecraft:item_model" set from storage gm4_furniture:temp trade_data[1]."minecraft:item_model" +execute align xyz run data modify entity @e[type=item_display,tag=gm4_furniture.tool_prev,dx=0,dy=0,dz=0,limit=1] item.components."minecraft:item_model" set from storage gm4_furniture:temp trade_data[-1]."minecraft:item_model" # build the trades from trade_data data modify storage gm4_furniture:temp trade_data set from storage gm4_furniture:temp trade_data[0].trades diff --git a/gm4_furniture/data/gm4_furniture/loot_table/items/furniture_station.json b/gm4_furniture/data/gm4_furniture/loot_table/items/furniture_station.json index 42caf89e90..c9e6fd5e6e 100644 --- a/gm4_furniture/data/gm4_furniture/loot_table/items/furniture_station.json +++ b/gm4_furniture/data/gm4_furniture/loot_table/items/furniture_station.json @@ -15,7 +15,7 @@ { "function": "minecraft:set_components", "components": { - "minecraft:custom_model_data": "block/furniture/furniture_station", + "minecraft:item_model":"gm4_furniture:furniture_station", "minecraft:profile": { "id": [ -308545246, diff --git a/gm4_furniture/data/gm4_furniture/loot_table/items/paintbrush.json b/gm4_furniture/data/gm4_furniture/loot_table/items/paintbrush.json index 4a25e3f613..7bb455a75e 100644 --- a/gm4_furniture/data/gm4_furniture/loot_table/items/paintbrush.json +++ b/gm4_furniture/data/gm4_furniture/loot_table/items/paintbrush.json @@ -16,7 +16,6 @@ { "function": "minecraft:set_components", "components": { - "minecraft:custom_model_data": "item/furniture/paintbrush", "minecraft:item_model": "gm4_furniture:paintbrush", "!minecraft:equippable": {} } diff --git a/gm4_furniture/data/gm4_furniture/predicate/holding_bucket.json b/gm4_furniture/data/gm4_furniture/predicate/holding_bucket.json index 9ca538a0bd..26cf2cf0a1 100644 --- a/gm4_furniture/data/gm4_furniture/predicate/holding_bucket.json +++ b/gm4_furniture/data/gm4_furniture/predicate/holding_bucket.json @@ -1,14 +1,33 @@ { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "equipment": { - "mainhand": { - "items": [ - "minecraft:bucket", - "minecraft:water_bucket" - ] + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "equipment": { + "mainhand": { + "items": [ + "minecraft:bucket", + "minecraft:water_bucket" + ] + } + } + } + }, + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "equipment": { + "offhand": { + "items": [ + "minecraft:bucket", + "minecraft:water_bucket" + ] + } } } } + ] } diff --git a/gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush.json b/gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush.json index 9e062a4c5d..363f6edf14 100644 --- a/gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush.json +++ b/gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush.json @@ -1,16 +1,13 @@ { - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "equipment": { - "mainhand": { - "items": [ - "minecraft:leather_horse_armor" - ], - "components": { - "minecraft:custom_data": "{gm4_furniture:paintbrush}" - } - } - } + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:reference", + "name": "gm4_furniture:holding_paintbrush_mainhand" + }, + { + "condition": "minecraft:reference", + "name": "gm4_furniture:holding_paintbrush_offhand" } + ] } diff --git a/gm4_furniture/data/gm4_furniture/predicate/holding_empty_bucket.json b/gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush_mainhand.json similarity index 50% rename from gm4_furniture/data/gm4_furniture/predicate/holding_empty_bucket.json rename to gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush_mainhand.json index eb467d159a..9e062a4c5d 100644 --- a/gm4_furniture/data/gm4_furniture/predicate/holding_empty_bucket.json +++ b/gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush_mainhand.json @@ -5,8 +5,11 @@ "equipment": { "mainhand": { "items": [ - "minecraft:bucket" - ] + "minecraft:leather_horse_armor" + ], + "components": { + "minecraft:custom_data": "{gm4_furniture:paintbrush}" + } } } } diff --git a/gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush_offhand.json b/gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush_offhand.json new file mode 100644 index 0000000000..ad5268da4b --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/predicate/holding_paintbrush_offhand.json @@ -0,0 +1,16 @@ +{ + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "equipment": { + "offhand": { + "items": [ + "minecraft:leather_horse_armor" + ], + "components": { + "minecraft:custom_data": "{gm4_furniture:paintbrush}" + } + } + } + } +} diff --git a/gm4_furniture/data/gm4_furniture/predicate/holding_water_bucket.json b/gm4_furniture/data/gm4_furniture/predicate/holding_water_bucket.json deleted file mode 100644 index 0cbf67e9a0..0000000000 --- a/gm4_furniture/data/gm4_furniture/predicate/holding_water_bucket.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "condition": "minecraft:entity_properties", - "entity": "this", - "predicate": { - "equipment": { - "mainhand": { - "items": [ - "minecraft:water_bucket" - ] - } - } - } -} diff --git a/gm4_furniture/data/gm4_furniture/recipe/furniture_station.json b/gm4_furniture/data/gm4_furniture/recipe/furniture_station.json index bf509261c2..69059f3c2d 100644 --- a/gm4_furniture/data/gm4_furniture/recipe/furniture_station.json +++ b/gm4_furniture/data/gm4_furniture/recipe/furniture_station.json @@ -15,7 +15,7 @@ "id": "minecraft:player_head", "components": { "minecraft:custom_data": "{gm4_furniture:{furniture_id:\"furniture_station\"}}", - "minecraft:custom_model_data": "block/furniture/furniture_station", + "minecraft:item_model": "gm4_furniture:furniture_station", "minecraft:profile": { "id": [ -308545246, diff --git a/gm4_furniture/data/gm4_furniture/recipe/paintbrush.json b/gm4_furniture/data/gm4_furniture/recipe/paintbrush.json index 0393180454..87340c6040 100644 --- a/gm4_furniture/data/gm4_furniture/recipe/paintbrush.json +++ b/gm4_furniture/data/gm4_furniture/recipe/paintbrush.json @@ -19,7 +19,6 @@ "minecraft:attribute_modifiers" ] }, - "minecraft:custom_model_data": "item/furniture/paintbrush", "minecraft:item_model": "gm4_furniture:paintbrush", "minecraft:custom_data": "{gm4_furniture:\"paintbrush\"}", "minecraft:item_name": { diff --git a/gm4_furniture/data/gm4_furniture/tags/item/buckets.json b/gm4_furniture/data/gm4_furniture/tags/item/buckets.json new file mode 100644 index 0000000000..9ab2f1c41f --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/tags/item/buckets.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:bucket", + "minecraft:water_bucket" + ] +} diff --git a/gm4_furniture/data/gm4_furniture/tags/item/candle_igniters.json b/gm4_furniture/data/gm4_furniture/tags/item/candle_igniters.json new file mode 100644 index 0000000000..a2db61b729 --- /dev/null +++ b/gm4_furniture/data/gm4_furniture/tags/item/candle_igniters.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:fire_charge", + "minecraft:flint_and_steel" + ] +} diff --git a/gm4_furniture/data/gm4_furniture/template/function/furniture_place_template.mcfunction b/gm4_furniture/data/gm4_furniture/template/function/furniture_place_template.mcfunction index 4d2b6eb876..b631eaa376 100644 --- a/gm4_furniture/data/gm4_furniture/template/function/furniture_place_template.mcfunction +++ b/gm4_furniture/data/gm4_furniture/template/function/furniture_place_template.mcfunction @@ -8,9 +8,10 @@ scoreboard players set $valid_placement gm4_furniture_data 1 # set variables -scoreboard players set $dyable gm4_furniture_data {{ dyable }} +scoreboard players set $dyeable gm4_furniture_data {{ dyeable }} scoreboard players set $table gm4_furniture_data {{ table }} scoreboard players set $custom_interaction gm4_furniture_data {{ custom_interaction }} +scoreboard players set $custom_placement gm4_furniture_data {{ custom_placement }} scoreboard players set $length gm4_furniture_data {{ length }} scoreboard players set $depth gm4_furniture_data {{ depth }} scoreboard players set $height gm4_furniture_data {{ height }} @@ -36,22 +37,24 @@ execute if score $ceiling_only gm4_furniture_data matches 1 if block ~ ~1 ~ #gm4 # wall placed furniture is not allowed to have depth, if any size is bigger than 1 check if there is space scoreboard players set $placement_blocked gm4_furniture_data 0 +execute store success score $existing_interaction gm4_furniture_data positioned ~ ~-0.5001 ~ store result score $check_id gm4_furniture_id run scoreboard players get @e[type=interaction,tag=gm4_furniture.interaction,distance=..0.1,limit=1] gm4_furniture_id +execute if score $existing_interaction gm4_furniture_data matches 1 run scoreboard players set $valid_placement gm4_furniture_data 0 execute if score $valid_placement gm4_furniture_data matches 1 if score $length gm4_furniture_data matches 2.. run function gm4_furniture:place/check_size/length_prep summon marker ~ ~ ~ {Tags:["gm4_furniture","gm4_furniture.marked_block","gm4_furniture.middle"]} setblock ~ ~ ~ air execute if score $valid_placement gm4_furniture_data matches 1 if score $depth gm4_furniture_data matches 2.. run function gm4_furniture:place/check_size/depth_prep execute if score $valid_placement gm4_furniture_data matches 1 if score $height gm4_furniture_data matches 2.. run function gm4_furniture:place/check_size/height_prep -kill @e[type=marker,tag=gm4_furniture.middle,distance=..2,limit=1,sort=nearest] +kill @n[type=marker,tag=gm4_furniture.middle,distance=..2] execute if score $placement_blocked gm4_furniture_data matches 1 run scoreboard players set $valid_placement gm4_furniture_data 0 execute if score $placement_blocked gm4_furniture_data matches 1 run kill @e[type=marker,tag=gm4_furniture.marked_block] # if placement is not valid cancel placement execute if score $valid_placement gm4_furniture_data matches 0 run loot spawn ~ ~ ~ loot gm4_furniture:furniture/{{ category }}/{{ technical_id }} +execute if score $existing_interaction gm4_furniture_data matches 1 as @e[type=item_display,tag=gm4_furniture.display,distance=..8] if score @s gm4_furniture_id = $check_id gm4_furniture_id run function gm4_furniture:place/replace_furniture_block with entity @s item.components."minecraft:custom_data".gm4_furniture execute if score $valid_placement gm4_furniture_data matches 0 run return run data modify entity @n[type=item,nbt={Age:0s},distance=..0.1] Item.components."minecraft:dyed_color" set from storage gm4_furniture:temp furniture_data.color # spawn the furniture -summon item_display ~ ~-0.4999 ~ {Tags:["gm4_furniture","gm4_furniture.display","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.{{ category }}.{{ technical_id }}",item:{id:"leather_horse_armor",count:1,components:{"minecraft:custom_data":{gm4_furniture:{furniture_id:"{{ category }}/{{ technical_id }}"}},"minecraft:custom_model_data":"{{ custom_model_data }}","minecraft:item_model":"{{ item_model }}"}},item_display:head,Rotation:[0.0f,0.0f],transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0.5f,0f],scale:[{{ scale }}f,{{ scale }}f,{{ scale }}f]}} -execute positioned ~ ~-0.4999 ~ run data modify entity @n[type=minecraft:item_display,tag=gm4_new_furniture,tag=gm4_furniture.display,distance=..0.1] item.components."minecraft:dyed_color" set from storage gm4_furniture:temp furniture_data.color +summon item_display ~ ~-0.4999 ~ {Tags:["gm4_furniture","gm4_furniture.display","smithed.entity","smithed.strict","gm4_new_furniture"],CustomName:"gm4_furniture_display.{{ category }}.{{ technical_id }}",item:{id:"leather_horse_armor",count:1,components:{"minecraft:custom_data":{gm4_furniture:{furniture_id:"{{ category }}/{{ technical_id }}",block_id:"{{ block_id }}"}},"minecraft:item_model":"{{ item_model }}"}},item_display:head,Rotation:[0.0f,0.0f],transformation:{left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f],translation:[0f,0.5f,0f],scale:[{{ scale }}f,{{ scale }}f,{{ scale }}f]}} summon interaction ~-0.0001 ~-0.5001 ~-0.0001 {Tags:["gm4_furniture","gm4_furniture.interaction","gm4_furniture.main","smithed.entity","smithed.strict","gm4_new_furniture"],height:1.0003f,width:1.0003f,response:1b} setblock ~ ~ ~ {{ block_id }} @@ -69,9 +72,9 @@ execute if score $custom_interaction gm4_furniture_data matches 1 run tag @e[typ # if furniture is a table reduce interaction height execute if score $table gm4_furniture_data matches 1 as @e[type=interaction,tag=gm4_new_furniture,distance=..8] run data modify entity @s height set value 1f -# if furniture is dyable set to basic white -execute if score $dyable gm4_furniture_data matches 1 run data modify entity @e[type=item_display,distance=..2,tag=gm4_new_furniture,limit=1,sort=nearest] item.components."minecraft:dyed_color".rgb set from storage gm4_furniture:temp furniture_data.color -execute if score $dyable gm4_furniture_data matches 1 run tag @e[type=interaction,tag=gm4_new_furniture,distance=..8] add gm4_furniture.dyable +# if furniture is dyeable set to basic white +execute if score $dyeable gm4_furniture_data matches 1 positioned ~ ~-0.4999 ~ run data modify entity @n[type=minecraft:item_display,tag=gm4_new_furniture,tag=gm4_furniture.display,distance=..0.1] item.components."minecraft:dyed_color" set from storage gm4_furniture:temp furniture_data.color +execute if score $dyeable gm4_furniture_data matches 1 run tag @e[type=interaction,tag=gm4_new_furniture,distance=..8] add gm4_furniture.dyeable # if furniture is sittable spawn sitting item_displays at appropiate locations and add tag scoreboard players set @e[type=interaction,tag=gm4_new_furniture,distance=..8] gm4_furniture_sit_height {{ sittable }} @@ -79,6 +82,9 @@ scoreboard players set @e[type=interaction,tag=gm4_new_furniture,distance=..8] g # rotate furniture depending on rotation set by player (if rotation is 1 default rotation can be kept) execute if score $rotation gm4_furniture_data matches 2.. as @e[tag=gm4_new_furniture,distance=..8] run data modify entity @s Rotation set from storage gm4_furniture:data Rotation +# custom placement +execute if score $custom_placement gm4_furniture_data matches 1 run function gm4_furniture:place/custom/furniture/{{ category }}/{{ technical_id }} + # mark block as placed and set id playsound minecraft:block.barrel.close block @a[distance=..6] ~ ~ ~ 1 1.6 execute store result score @e[tag=gm4_new_furniture,distance=..8] gm4_furniture_id run scoreboard players add $next_id gm4_furniture_id 1 diff --git a/gm4_furniture/data/gm4_furniture/template/loot_table/furniture_item_template.json b/gm4_furniture/data/gm4_furniture/template/loot_table/furniture_item_template.json index 415b569084..ff9ebe65d8 100644 --- a/gm4_furniture/data/gm4_furniture/template/loot_table/furniture_item_template.json +++ b/gm4_furniture/data/gm4_furniture/template/loot_table/furniture_item_template.json @@ -15,18 +15,17 @@ "conditions": [ { "condition": "minecraft:random_chance", - "chance": {{ dyable }} + "chance": {{ dyeable }} } ] }, { "function": "minecraft:set_custom_data", - "tag": "{gm4_furniture:{furniture_id:\"{{ category }}/{{ technical_id }}\",color:16383998}}" + "tag": "{gm4_furniture:{furniture_id:\"{{ category }}/{{ technical_id }}\",block_id:\"{{ block_id }}\"}}" }, { "function": "minecraft:set_components", "components": { - "minecraft:custom_model_data": "{{ custom_model_data }}", "minecraft:item_model": "{{ item_model }}" } }, diff --git a/gm4_furniture/generate.py b/gm4_furniture/generate.py index 033ff44350..5503e0289f 100644 --- a/gm4_furniture/generate.py +++ b/gm4_furniture/generate.py @@ -61,7 +61,7 @@ def beet_default(ctx: Context): def generate_trade_data(ctx, furniture_set, set_name): # create a command to make an empty storage called new_trades that holds the set_name name and tool cmd - new_trades_init = "data modify storage gm4_furniture:temp new_trades." + set_name + " set value {\"minecraft:custom_model_data\":\"item/furniture/set_tool/" + set_name + "\",trades:[]}" + new_trades_init = "data modify storage gm4_furniture:temp new_trades." + set_name + " set value {\"minecraft:item_model\":\"gm4_furniture:set_tool/" + set_name + "\",trades:[]}" # iterate over the rows in the spreadsheet and add the trade data for each furniture to the storage new_trades_list = [] @@ -70,13 +70,7 @@ def generate_trade_data(ctx, furniture_set, set_name): new_trades_list = '\n'.join(new_trades_list) # add command to append the main furniture_station storage with the newly created new_trades - new_trades_append = "data modify storage gm4_furniture:data furniture_station append from storage gm4_furniture:temp new_trades." + set_name - - # add index to model_data - ctx.meta["gm4"].setdefault("model_data", []).append({ - "item": "command_block", - "reference": "item/furniture/set_tool/" + set_name - }) + new_trades_append = "data modify storage gm4_furniture:data furniture_station prepend from storage gm4_furniture:temp new_trades." + set_name # return the created commands return(new_trades_init,new_trades_list,new_trades_append) @@ -88,16 +82,9 @@ def generate_furniture_data(ctx, furniture_set, set_name): # create furniture loot tables and placement functions for every furniture in this category for row in furniture_set: - # get custom_model_data index - custom_model_data = "block/furniture/" + set_name + "/" + row['technical_id'].replace(".","/") + # set item model item_model = "gm4_furniture:" + set_name + "/" + row['technical_id'].replace(".","/") - # add index to model_data - ctx.meta["gm4"].setdefault("model_data", []).append({ - "item": ["leather_horse_armor", "player_head"], - "reference": custom_model_data - }) - # build placement function and loot table for furniture piece subproject_config = { "data_pack": { @@ -116,20 +103,20 @@ def generate_furniture_data(ctx, furniture_set, set_name): "category": set_name, "technical_id": row['technical_id'], "display_name": row['display_name'], - "custom_model_data": custom_model_data, "item_model": item_model, "block_id": row['block_id'], "sittable": row['sittable'], "wall_only": str(int(row['wall_only'] == 'TRUE')), "ceiling_only": str(int(row['ceiling_only'] == 'TRUE')), - "dyable": str(int(row['dyable'] == 'TRUE')), + "dyeable": str(int(row['dyeable'] == 'TRUE')), "length": row['length'], "depth": row['depth'], "height": row['height'], "table": str(int(row['table'] == 'TRUE')), "scale": row['scale'], "allow_diagonal_placement": str(int(row['diag'] == 'TRUE')), - "custom_interaction": str(int(row['custom'] == 'TRUE')) + "custom_interaction": str(int(row['custom_interaction'] == 'TRUE')), + "custom_placement" : str(int(row['custom_placement'] == 'TRUE')) } } diff --git a/gm4_furniture/raw_data/furniture_set/cloth_set.csv b/gm4_furniture/raw_data/furniture_set/cloth_set.csv index fe31bd1732..4f129ae959 100644 --- a/gm4_furniture/raw_data/furniture_set/cloth_set.csv +++ b/gm4_furniture/raw_data/furniture_set/cloth_set.csv @@ -1,3 +1,3 @@ -craft_item_1_id,craft_item_1_count,craft_item_2_id,craft_item_2_count,craft_result_count,technical_id,display_name,block_id,length,depth,height,sittable,dyable,wall_only,ceiling_only,table,scale,diag,custom -candle,1,paper,4,1,paper_lantern_1,Paper Lantern,light[level=15],1,1,1,0,TRUE,FALSE,TRUE,FALSE,1,FALSE,FALSE -stick,1,white_wool,6,1,horizontal_flag_1,Long Flag,light[level=0],1,1,1,0,TRUE,FALSE,FALSE,FALSE,1,TRUE,FALSE \ No newline at end of file +craft_item_1_id,craft_item_1_count,craft_item_2_id,craft_item_2_count,craft_result_count,technical_id,display_name,block_id,length,depth,height,custom_placement,sittable,dyeable,wall_only,ceiling_only,table,scale,diag,custom_interaction +candle,1,paper,4,1,paper_lantern_1,Paper Lantern,light[level=15],1,1,1,FALSE,0,TRUE,FALSE,TRUE,FALSE,1,FALSE,FALSE +stick,1,white_wool,6,1,horizontal_flag_1,Long Flag,light[level=0],1,1,1,FALSE,0,TRUE,FALSE,FALSE,FALSE,1,TRUE,FALSE \ No newline at end of file diff --git a/gm4_furniture/raw_data/furniture_set/metal_set.csv b/gm4_furniture/raw_data/furniture_set/metal_set.csv index 6e4193ac1a..85b78247d0 100644 --- a/gm4_furniture/raw_data/furniture_set/metal_set.csv +++ b/gm4_furniture/raw_data/furniture_set/metal_set.csv @@ -1,5 +1,8 @@ -craft_item_1_id,craft_item_1_count,craft_item_2_id,craft_item_2_count,craft_result_count,technical_id,display_name,block_id,length,depth,height,sittable,dyable,wall_only,ceiling_only,table,scale,diag,custom -iron_ingot,3,candle,3,1,iron.3_candelabra_1,Iron Candelabra,light[level=13],1,1,1,0,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE -iron_ingot,3,candle,1,1,iron.lantern_1,Iron Lantern,light[level=10],1,1,1,0,FALSE,FALSE,FALSE,FALSE,1,TRUE,FALSE -gold_ingot,3,candle,3,1,gold.3_candelabra_1,Golden Candelabra,light[level=13],1,1,1,0,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE -gold_ingot,8,air,0,1,gold.skull_1,Golden Skull,light[level=0],1,1,1,0,FALSE,FALSE,FALSE,FALSE,1,TRUE,FALSE \ No newline at end of file +craft_item_1_id,craft_item_1_count,craft_item_2_id,craft_item_2_count,craft_result_count,technical_id,display_name,block_id,length,depth,height,custom_placement,sittable,dyeable,wall_only,ceiling_only,table,scale,diag,custom_interaction +iron_ingot,3,candle,3,1,iron.3_candelabra_1,Iron Candelabra,light[level=0],1,1,1,FALSE,0,TRUE,FALSE,FALSE,FALSE,1,FALSE,TRUE +iron_ingot,3,candle,1,1,iron.lantern_1,Iron Lantern,light[level=10],1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,TRUE,FALSE +gold_ingot,3,candle,3,1,gold.3_candelabra_1,Golden Candelabra,light[level=0],1,1,1,FALSE,0,TRUE,FALSE,FALSE,FALSE,1,FALSE,TRUE +gold_ingot,8,air,0,1,gold.skull_1,Golden Skull,light[level=0],1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,TRUE,FALSE +iron_ingot,3,redstone_lamp,1,1,iron.desk_lamp,Iron Desk Lamp,light[level=12],1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE +iron_ingot,6,wool,1,1,iron.foldable_chair,Iron Foldable Chair,barrier,1,1,1,FALSE,50,TRUE,FALSE,FALSE,FALSE,1,TRUE,FALSE +iron_ingot,16,redstone_lamp,2,1,iron.spotlight,Iron Spotlight,barrier,1,1,1,TRUE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE \ No newline at end of file diff --git a/gm4_furniture/raw_data/furniture_set/stone_set.csv b/gm4_furniture/raw_data/furniture_set/stone_set.csv index 1094c81a6e..ca0e474055 100644 --- a/gm4_furniture/raw_data/furniture_set/stone_set.csv +++ b/gm4_furniture/raw_data/furniture_set/stone_set.csv @@ -1,6 +1,11 @@ -craft_item_1_id,craft_item_1_count,craft_item_2_id,craft_item_2_count,craft_result_count,technical_id,display_name,block_id,length,depth,height,sittable,dyable,wall_only,ceiling_only,table,scale,diag,custom -stone_bricks,8,tadpole_bucket,1,1,statues.frog,Stone Frog Statue,barrier,1,1,1,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE -stone_bricks,8,bee_nest,1,1,statues.bee,Stone Bee Statue,barrier,1,1,1,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE -stone_bricks,8,pufferfish_bucket,1,1,statues.pufferfish,Stone Pufferfish Statue,barrier,1,1,1,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE -stone_bricks,8,axolotl_bucket,1,1,statues.axolotl,Stone Axolotl Statue,barrier,1,1,1,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE -stone_bricks,8,jukebox,1,1,statues.allay,Stone Allay Statue,barrier,1,1,1,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE \ No newline at end of file +craft_item_1_id,craft_item_1_count,craft_item_2_id,craft_item_2_count,craft_result_count,technical_id,display_name,block_id,length,depth,height,custom_placement,sittable,dyeable,wall_only,ceiling_only,table,scale,diag,custom_interaction +stone_bricks,8,tadpole_bucket,1,1,statues.frog,Stone Frog Statue,barrier,1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE +stone_bricks,8,bee_nest,1,1,statues.bee,Stone Bee Statue,barrier,1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE +stone_bricks,8,pufferfish_bucket,1,1,statues.pufferfish,Stone Pufferfish Statue,barrier,1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE +stone_bricks,8,axolotl_bucket,1,1,statues.axolotl,Stone Axolotl Statue,barrier,1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE +stone_bricks,8,jukebox,1,1,statues.allay,Stone Allay Statue,barrier,1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE +stone_bricks,8,slime_block,1,1,statues.slime,Stone Slime Statue,barrier,1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE +stone_bricks,8,egg,1,1,statues.chicken,Stone Chicken Statue,barrier,1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,TRUE +stone_bricks,1,lantern,1,1,lantern_1,Small Stone Lantern,light[level=14],1,1,1,FALSE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE +stone_bricks,2,lantern,1,1,lantern_2,Medium Stone Lantern,light[level=14],1,1,2,TRUE,0,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE +stone_bricks,8,lantern,1,1,lantern_big_1,Large Stone Lantern,light[level=14],1,1,3,TRUE,0,FALSE,FALSE,FALSE,FALSE,2,FALSE,FALSE \ No newline at end of file diff --git a/gm4_furniture/raw_data/furniture_set/wood_set.csv b/gm4_furniture/raw_data/furniture_set/wood_set.csv index c44d2485d6..742c8993d7 100644 --- a/gm4_furniture/raw_data/furniture_set/wood_set.csv +++ b/gm4_furniture/raw_data/furniture_set/wood_set.csv @@ -1,13 +1,25 @@ -craft_item_1_id,craft_item_1_count,craft_item_2_id,craft_item_2_count,craft_result_count,technical_id,display_name,block_id,length,depth,height,sittable,dyable,wall_only,ceiling_only,table,scale,diag,custom -oak_planks,4,air,0,1,plain.1x1_table_1,Small Oak Table,barrier,1,1,1,0,FALSE,FALSE,FALSE,TRUE,1,FALSE,FALSE -oak_planks,16,air,0,1,plain.2x2_table_1,Large Oak Table,barrier,2,2,1,0,FALSE,FALSE,FALSE,TRUE,1,FALSE,FALSE -oak_planks,12,air,0,1,plain.bench_1,Oak Bench,barrier,3,1,1,50,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE -oak_planks,4,air,0,1,plain.chair_1,Oak Chair,barrier,1,1,1,50,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE -oak_planks,4,air,0,1,plain.stool_1,Oak Stool,barrier,1,1,1,50,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE -oak_planks,1,candle,1,1,plain.light_1,Oak Candle Holder,light[level=15],1,1,1,0,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE -dark_oak_planks,4,white_wool,1,1,fancy.1x1_table_1,Small Dark Oak Table,barrier,1,1,1,0,TRUE,FALSE,FALSE,TRUE,1,FALSE,FALSE -dark_oak_planks,16,white_wool,4,1,fancy.2x2_table_1,Large Dark Oak Table,barrier,2,2,1,0,TRUE,FALSE,FALSE,TRUE,1,FALSE,FALSE -dark_oak_planks,12,white_wool,3,1,fancy.bench_1,Dark Oak Bench,barrier,3,1,1,50,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE -dark_oak_planks,4,white_wool,1,1,fancy.chair_1,Dark Oak Chair,barrier,1,1,1,50,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE -dark_oak_planks,4,white_wool,1,1,fancy.stool_1,Dark Oak Stool,barrier,1,1,1,50,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE -dark_oak_planks,1,candle,1,1,fancy.light_1,Dark Oak Lamp Shade,light[level=12],1,1,1,0,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE \ No newline at end of file +craft_item_1_id,craft_item_1_count,craft_item_2_id,craft_item_2_count,craft_result_count,technical_id,display_name,block_id,length,depth,height,custom_placement,sittable,dyeable,wall_only,ceiling_only,table,scale,diag,custom_interaction +oak_planks,4,air,0,1,oak.1x1_table_1,Small Oak Table,barrier,1,1,1,FALSE,0,FALSE,FALSE,FALSE,TRUE,1,FALSE,FALSE +oak_planks,16,air,0,1,oak.2x2_table_1,Large Oak Table,barrier,2,2,1,FALSE,0,FALSE,FALSE,FALSE,TRUE,1,FALSE,FALSE +oak_planks,12,air,0,1,oak.bench_1,Oak Bench,barrier,3,1,1,FALSE,50,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE +oak_planks,4,air,0,1,oak.chair_1,Oak Chair,barrier,1,1,1,FALSE,50,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE +oak_planks,4,air,0,1,oak.stool_1,Oak Stool,barrier,1,1,1,FALSE,50,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE +oak_planks,1,candle,1,1,oak.light_1,Oak Candle Holder,light[level=0],1,1,1,FALSE,0,TRUE,FALSE,FALSE,FALSE,1,FALSE,TRUE +dark_oak_planks,4,white_wool,1,1,dark_oak.1x1_table_1,Small Dark Oak Table,barrier,1,1,1,FALSE,0,TRUE,FALSE,FALSE,TRUE,1,FALSE,FALSE +dark_oak_planks,16,white_wool,4,1,dark_oak.2x2_table_1,Large Dark Oak Table,barrier,2,2,1,FALSE,0,TRUE,FALSE,FALSE,TRUE,1,FALSE,FALSE +dark_oak_planks,12,white_wool,3,1,dark_oak.bench_1,Dark Oak Bench,barrier,3,1,1,FALSE,50,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE +dark_oak_planks,4,white_wool,1,1,dark_oak.chair_1,Dark Oak Chair,barrier,1,1,1,FALSE,50,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE +dark_oak_planks,4,white_wool,1,1,dark_oak.stool_1,Dark Oak Stool,barrier,1,1,1,FALSE,50,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE +dark_oak_planks,1,redstone_lamp,1,1,dark_oak.light_1,Dark Oak Lamp Shade,light[level=12],1,1,1,FALSE,0,TRUE,FALSE,FALSE,FALSE,1,FALSE,TRUE +spruce_planks,4,air,0,1,spruce.1x1_table_1,Small Spruce Table,barrier,1,1,1,FALSE,0,FALSE,FALSE,FALSE,TRUE,1,FALSE,FALSE +spruce_planks,16,air,0,1,spruce.2x2_table_1,Large Spruce Table,barrier,2,2,1,FALSE,0,FALSE,FALSE,FALSE,TRUE,1,FALSE,FALSE +spruce_planks,12,air,0,1,spruce.bench_1,Spruce Bench,barrier,3,1,1,FALSE,50,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE +spruce_planks,4,air,0,1,spruce.chair_1,Spruce Chair,barrier,1,1,1,FALSE,50,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE +spruce_planks,4,air,0,1,spruce.stool_1,Spruce Stool,barrier,1,1,1,FALSE,75,FALSE,FALSE,FALSE,FALSE,1,FALSE,FALSE +spruce_planks,1,torch,1,1,spruce.light_1,Spruce Torch Sconce,light[level=14],1,1,1,FALSE,0,FALSE,TRUE,FALSE,FALSE,1,FALSE,FALSE +cherry_planks,4,white_wool,1,1,cherry.1x1_table_1,Small Cherry Table,barrier,1,1,1,FALSE,0,TRUE,FALSE,FALSE,TRUE,1,FALSE,FALSE +cherry_planks,16,white_wool,4,1,cherry.2x2_table_1,Large Cherry Table,barrier,2,2,1,FALSE,0,TRUE,FALSE,FALSE,TRUE,1,FALSE,FALSE +cherry_planks,12,white_wool,3,1,cherry.bench_1,Cherry Bench,barrier,3,1,1,FALSE,50,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE +cherry_planks,4,white_wool,1,1,cherry.chair_1,Cherry Chair,barrier,1,1,1,FALSE,50,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE +cherry_planks,4,white_wool,1,1,cherry.stool_1,Cherry Stool,barrier,1,1,1,FALSE,40,TRUE,FALSE,FALSE,FALSE,1,FALSE,FALSE +cherry_planks,1,lantern,1,1,cherry.light_1,Cherry Flower Lamp,barrier,1,1,1,FALSE,0,TRUE,FALSE,TRUE,FALSE,1,FALSE,FALSE \ No newline at end of file diff --git a/gm4_guidebook/triggers.json b/gm4_guidebook/triggers.json index 61c6886edf..67a5039457 100644 --- a/gm4_guidebook/triggers.json +++ b/gm4_guidebook/triggers.json @@ -1,6 +1,6 @@ { "__important__": "Generated by generate_guidebooks.py. Don't manually update this", - "__next__": 121, + "__next__": 122, "animi_shamir": 91, "apple_trees": 83, "arborenda_shamir": 20, @@ -82,6 +82,7 @@ "potion_liquids": 32, "potion_swords": 62, "record_crafting": 97, + "reeling_rods": 121, "relocators": 70, "resurrecting_skeletons": 41, "resurrecting_zombies": 46, diff --git a/gm4_reeling_rods/README.md b/gm4_reeling_rods/README.md new file mode 100644 index 0000000000..b9e4fe8600 --- /dev/null +++ b/gm4_reeling_rods/README.md @@ -0,0 +1,10 @@ +# Reeling Rods + +Reel in more than just fish with these rods. Yoink the chest from the chest boat, deal some damage, and more! + +### Features +- All fishing rods have extra abilities when hooking Paintings, Item Frames, Leash Knots, Shulkers and End Crystals. Hooking any entity will also dismount them from their vehicle. + +Adds 2 fishing rod enchantments, Reeling and Barbed. +- Reeling revolves around stealing from entities. Pull the chest from chest boats and so much more! +- Barbed turns a fishing rod into a lethal weapon. With 5 levels, it applies a scratching damage to the hooked mob and then bleeding damage. diff --git a/gm4_reeling_rods/beet.yaml b/gm4_reeling_rods/beet.yaml new file mode 100644 index 0000000000..fa9853b753 --- /dev/null +++ b/gm4_reeling_rods/beet.yaml @@ -0,0 +1,38 @@ +id: gm4_reeling_rods +name: Reeling Rods +version: 1.0.X + +data_pack: + load: . + +pipeline: + - generate_files + - gm4.plugins.extend.module + +require: + - bolt + +meta: + gm4: + versioning: + schedule_loops: [tick] + website: + description: Reel in more than just fish with these rods! Yoink the chest from the chest boat and more! + recommended: + - gm4_end_fishing + - gm4_live_catch + notes: [] + modrinth: + project_id: MWPuloVL + smithed: + pack_id: gm4_reeling_rods + #planetminecraft: + #uid: + video: null + wiki: https://wiki.gm4.co/wiki/Reeling_Rods + credits: + Creators: + - runcows + - Bloo + Icon Design: + - runcows diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/enchantment/barbed.json b/gm4_reeling_rods/data/gm4_reeling_rods/enchantment/barbed.json new file mode 100644 index 0000000000..5a84154998 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/enchantment/barbed.json @@ -0,0 +1,24 @@ +{ + "description": { + "translate": "gm4.reeling_rods.enchantment.barbed", + "fallback": "Barbed" + }, + "exclusive_set": "gm4_reeling_rods:reeling", + "supported_items": "minecraft:fishing_rod", + "primary_items": "minecraft:fishing_rod", + "weight": 1, + "max_level": 5, + "min_cost": { + "base": 1, + "per_level_above_first": 10 + }, + "max_cost": { + "base": 51, + "per_level_above_first": 10 + }, + "anvil_cost": 1, + "slots": [ + "any" + ], + "effects": {} +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/enchantment/reeling.json b/gm4_reeling_rods/data/gm4_reeling_rods/enchantment/reeling.json new file mode 100644 index 0000000000..392ae08292 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/enchantment/reeling.json @@ -0,0 +1,24 @@ +{ + "description": { + "translate": "gm4.reeling_rods.enchantment.reeling", + "fallback": "Reeling" + }, + "exclusive_set": "gm4_reeling_rods:barbed", + "supported_items": "minecraft:fishing_rod", + "primary_items": "minecraft:fishing_rod", + "weight": 1, + "max_level": 1, + "min_cost": { + "base": 20, + "per_level_above_first": 0 + }, + "max_cost": { + "base": 70, + "per_level_above_first": 0 + }, + "anvil_cost": 8, + "slots": [ + "any" + ], + "effects": {} +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/apply.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/apply.mcfunction new file mode 100644 index 0000000000..93cb08ac48 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/apply.mcfunction @@ -0,0 +1,24 @@ +# Applies the barbed damage to the hooked entity +# @s = hooked entity +# at bobber position +# with {damage} +# run from hooked_entity/select_type + +# immediate damage (amount scales with enchantment level) +execute store result score $show_death_messages gm4_reeling_rods.barbed_damage_timer run gamerule showDeathMessages +gamerule showDeathMessages false +$damage @s $(damage) cactus by @p[tag=gm4_reeling_rods.player] +playsound minecraft:entity.player.attack.crit player @a[distance=..16] ~ ~ ~ 1 1.82 + +# handle death (@e only selects entities which are alive) +# | this is of importance for entities which display death messages or re-spawn +tag @s add gm4_reeling_rods.victim +execute if entity @s[type=#gm4_reeling_rods:support_death_message] at @s unless entity @e[type=#gm4_reeling_rods:support_death_message,tag=gm4_reeling_rods.victim,distance=0,limit=1] run function gm4_reeling_rods:barbed/on_scratch_death + +# if the victim is still alive, schedule bleeding damage +execute at @s if entity @e[tag=gm4_reeling_rods.victim,distance=0,limit=1] run function gm4_reeling_rods:barbed/schedule_bleeding + +# reset scores, gamerule and tag +tag @s remove gm4_reeling_rods.victim +execute if score $show_death_messages gm4_reeling_rods.barbed_damage_timer matches 1 run gamerule showDeathMessages true +scoreboard players reset $show_death_messages gm4_reeling_rods.barbed_damage_timer diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/bleed.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/bleed.mcfunction new file mode 100644 index 0000000000..5f262a8af5 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/bleed.mcfunction @@ -0,0 +1,42 @@ +# updates the bleeding timer +# @s = entity recently hit by a barbed fishing rod +# at @s +# run from barbed/find_affected + +# advance timer +scoreboard players add @s gm4_reeling_rods.barbed_damage_timer 1 + +# clear if timer exceeds 3s +execute if score @s gm4_reeling_rods.barbed_damage_timer matches 61.. run return run function gm4_reeling_rods:barbed/clear + +# return unless phase of timer is 0 +scoreboard players operation $phase gm4_reeling_rods.barbed_damage_timer = @s gm4_reeling_rods.barbed_damage_timer +scoreboard players operation $phase gm4_reeling_rods.barbed_damage_timer %= @s gm4_reeling_rods.barbed_damage_period +execute unless score $phase gm4_reeling_rods.barbed_damage_timer matches 0 run return fail + +# find attacker +# | tags attacker with gm4_reeling_rods.barbed_attacker +# | sets $found_attacker gm4_reeling_rods.barbed_attacker_uuid0 +execute summon snowball run function gm4_reeling_rods:barbed/find_attacker + +# prepare to handle player death +execute store result score $show_death_messages gm4_reeling_rods.barbed_damage_timer run gamerule showDeathMessages +gamerule showDeathMessages false + +# apply damage +# | if the attacker was found, attribute it to the attacker, if not do not attribute it to anyone +# | use cactus damage type as it has no knockback and respects armor +# | print custom death message to obscure cactus death message +execute if score $found_attacker gm4_reeling_rods.barbed_attacker_uuid0 matches 1.. run damage @s 2 cactus by @p[tag=gm4_reeling_rods.barbed_attacker] +execute unless score $found_attacker gm4_reeling_rods.barbed_attacker_uuid0 matches 1.. run damage @s 2 cactus +playsound minecraft:block.pointed_dripstone.drip_lava neutral @a[distance=..6] ~ ~ ~ 1 1.8 +execute anchored eyes run particle damage_indicator ^ ^ ^ .2 .2 .2 0 3 +execute anchored eyes run particle damage_indicator ^ ^ ^1 .5 .5 .5 0 8 normal @s + +# handle death (@e only selects entities which are alive) +# | this is of importance for entities which display death messages or re-spawn +tag @s add gm4_reeling_rods.victim +execute if entity @s[type=#gm4_reeling_rods:support_death_message] at @s unless entity @e[type=#gm4_reeling_rods:support_death_message,tag=gm4_reeling_rods.victim,distance=0,limit=1] run function gm4_reeling_rods:barbed/on_bleeding_death +tag @s remove gm4_reeling_rods.victim +execute if score $show_death_messages gm4_reeling_rods.barbed_damage_timer matches 1 run gamerule showDeathMessages true +scoreboard players reset $show_death_messages gm4_reeling_rods.barbed_damage_timer diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/clear.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/clear.mcfunction new file mode 100644 index 0000000000..36cadb1fa5 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/clear.mcfunction @@ -0,0 +1,11 @@ +# stops bleeding damage +# @s = entity recently hit by a barbed fishing rod +# at @s +# run from barbed/bleed, barbed/on_bleeding_death, and barbed/on_scratch_death + +scoreboard players reset @s gm4_reeling_rods.barbed_attacker_uuid0 +scoreboard players reset @s gm4_reeling_rods.barbed_attacker_uuid1 +scoreboard players reset @s gm4_reeling_rods.barbed_attacker_uuid2 +scoreboard players reset @s gm4_reeling_rods.barbed_attacker_uuid3 +scoreboard players reset @s gm4_reeling_rods.barbed_damage_period +scoreboard players reset @s gm4_reeling_rods.barbed_damage_timer diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/find_affected.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/find_affected.mcfunction new file mode 100644 index 0000000000..4f645c471e --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/find_affected.mcfunction @@ -0,0 +1,10 @@ +# initiates bleeding damage on affected entities, de-schedules if no more entities are affected +# @s = undefined +# at undefined +# scheduled from barbed/schedule_bleeding and self + +# apply barbed damage +execute as @e[scores={gm4_reeling_rods.barbed_damage_timer=0..}] at @s run function gm4_reeling_rods:barbed/bleed + +# reschedule if there are still barbed entities +execute if entity @e[scores={gm4_reeling_rods.barbed_damage_timer=0..},limit=1] run schedule function gm4_reeling_rods:barbed/find_affected 1t replace diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/find_attacker.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/find_attacker.mcfunction new file mode 100644 index 0000000000..6095512db4 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/find_attacker.mcfunction @@ -0,0 +1,21 @@ +# locates the attacker, as commands do not accept int-array formatted strings in macros +# @s = temporary snowball +# at location of snowball +# run from barbed/bleed + +# build uuid array +data modify storage gm4_reeling_rods:temp barbed_attacker_uuid set value [I;0,0,0,0] +execute store result storage gm4_reeling_rods:temp barbed_attacker_uuid[0] int 1 run scoreboard players get @s gm4_reeling_rods.barbed_attacker_uuid0 +execute store result storage gm4_reeling_rods:temp barbed_attacker_uuid[1] int 1 run scoreboard players get @s gm4_reeling_rods.barbed_attacker_uuid1 +execute store result storage gm4_reeling_rods:temp barbed_attacker_uuid[2] int 1 run scoreboard players get @s gm4_reeling_rods.barbed_attacker_uuid2 +execute store result storage gm4_reeling_rods:temp barbed_attacker_uuid[3] int 1 run scoreboard players get @s gm4_reeling_rods.barbed_attacker_uuid3 + +# move uuid to snowball +data modify entity @s Owner set from storage gm4_reeling_rods:temp barbed_attacker_uuid + +# tag owner +scoreboard players set $found_attacker gm4_reeling_rods.barbed_attacker_uuid0 0 +execute on origin store success score $found_attacker gm4_reeling_rods.barbed_attacker_uuid0 run tag @s add gm4_reeling_rods.barbed_attacker + +# remove snowball +kill @s diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/on_bleeding_death.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/on_bleeding_death.mcfunction new file mode 100644 index 0000000000..69a903dd2f --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/on_bleeding_death.mcfunction @@ -0,0 +1,13 @@ +# handles entities bleeding to death +# @s = entity who died by bleeding to death from barbed damage +# at @s +# run from barbed/bleed + +# death message +execute if entity @s[type=player] run tellraw @a ["",{"translate":"text.gm4.reeling_rods.death.bleeding","fallback":"%s succumbed to their injuries",with:[{"selector":"@s"}]}] +execute unless entity @s[type=player] on owner run tag @s add gm4_reeling_rods.owner +execute unless entity @s[type=player] run tellraw @p[tag=gm4_reeling_rods.owner] ["",{"translate":"text.gm4.reeling_rods.death.bleeding","fallback":"%s succumbed to their injuries",with:[{"selector":"@s"}]}] +execute unless entity @s[type=player] on owner run tag @s remove gm4_reeling_rods.owner + +# reset barbed state +function gm4_reeling_rods:barbed/clear diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/on_scratch_death.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/on_scratch_death.mcfunction new file mode 100644 index 0000000000..eb1bcf8554 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/on_scratch_death.mcfunction @@ -0,0 +1,13 @@ +# handles entities scratched to death +# @s = entity who died by immediate damage from a barbed rod +# at @s +# run from barbed/apply + +# death message +execute if entity @s[type=player] run tellraw @a ["",{"translate":"text.gm4.reeling_rods.death.scratch","fallback":"%s was scratched to death by %s",with:[{"selector":"@s"},{"selector":"@p[tag=gm4_reeling_rods.player]"}]}] +execute unless entity @s[type=player] on owner run tag @s add gm4_reeling_rods.owner +execute unless entity @s[type=player] run tellraw @p[tag=gm4_reeling_rods.owner] ["",{"translate":"text.gm4.reeling_rods.death.scratch","fallback":"%s was scratched to death by %s",with:[{"selector":"@s"},{"selector":"@p[tag=gm4_reeling_rods.player]"}]}] +execute unless entity @s[type=player] on owner run tag @s remove gm4_reeling_rods.owner + +# reset barbed state +function gm4_reeling_rods:barbed/clear diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/schedule_bleeding.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/schedule_bleeding.mcfunction new file mode 100644 index 0000000000..f5a1b11deb --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/barbed/schedule_bleeding.mcfunction @@ -0,0 +1,16 @@ +# schedules bleeding damage for the entity that was just hit by barbed +# @s = entity just hit by barbed that has not died from the immediate damage +# at bobber position +# run from barbed/apply + +# store attacker uuid and period +data modify storage gm4_reeling_rods:temp enchanted.barbed.attacker_uuid set from entity @a[limit=1,tag=gm4_reeling_rods.player] UUID +execute store result score @s gm4_reeling_rods.barbed_attacker_uuid0 run data get storage gm4_reeling_rods:temp enchanted.barbed.attacker_uuid[0] +execute store result score @s gm4_reeling_rods.barbed_attacker_uuid1 run data get storage gm4_reeling_rods:temp enchanted.barbed.attacker_uuid[1] +execute store result score @s gm4_reeling_rods.barbed_attacker_uuid2 run data get storage gm4_reeling_rods:temp enchanted.barbed.attacker_uuid[2] +execute store result score @s gm4_reeling_rods.barbed_attacker_uuid3 run data get storage gm4_reeling_rods:temp enchanted.barbed.attacker_uuid[3] +execute store result score @s gm4_reeling_rods.barbed_damage_period run data get storage gm4_reeling_rods:temp enchanted.barbed.period + +# initiate timer +scoreboard players set @s gm4_reeling_rods.barbed_damage_timer 0 +schedule function gm4_reeling_rods:barbed/find_affected 1t replace diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/get_execution_pos.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/get_execution_pos.mcfunction new file mode 100644 index 0000000000..97442d330b --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/get_execution_pos.mcfunction @@ -0,0 +1,7 @@ +# stores position of a newly summoned marker and kills it +# @s = new marker +# at @s +# run from get_motion_to_player and reeling/enderman/action + +data modify storage gm4_reeling_rods:temp position set from entity @s Pos +kill @s diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/get_lookup.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/get_lookup.mcfunction new file mode 100644 index 0000000000..a0edd6f2b3 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/get_lookup.mcfunction @@ -0,0 +1,5 @@ +# Adds a value from the lookup table to Y motion +# with {lookup_key} +# run from get_motion_to_player + +$scoreboard players operation $motionY gm4_reeling_rods.math += $$(lookup_key) gm4_reeling_rods.lookup diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/get_motion_to_player.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/get_motion_to_player.mcfunction new file mode 100644 index 0000000000..beb2d92c43 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/get_motion_to_player.mcfunction @@ -0,0 +1,45 @@ +# Gets motion vector to launch entity to player. X and Z motion is 10% the block distance between the player and current position. Y motion uses the sum of the squares of position deltas as a lookup table key, the value of which is added to the Y position delta to get the Y motion. +# @s = entity with items to be yoinked +# at bobber in @s (most of the time) +# run from pull_items + +data modify storage gm4_reeling_rods:temp item_data.Motion set value [0d,0d,0d] + +# Store current position +execute summon marker run function gm4_reeling_rods:get_execution_pos +# | position stored in storage gm4_reeling_rods:temp position +execute store result score $currentX gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp position[0] 1 +execute store result score $currentY gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp position[1] 1 +execute store result score $currentZ gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp position[2] 1 + +# Player postion is stored in $motionX... ect from player/find_hooked_entity + +# Get distance from current position to player +scoreboard players operation $motionX gm4_reeling_rods.math -= $currentX gm4_reeling_rods.math +scoreboard players operation $motionY gm4_reeling_rods.math -= $currentY gm4_reeling_rods.math +scoreboard players operation $motionZ gm4_reeling_rods.math -= $currentZ gm4_reeling_rods.math + +# store Motion, y to be edited after +execute store result storage gm4_reeling_rods:temp item_data.Motion[0] double 0.1 run scoreboard players get $motionX gm4_reeling_rods.math +execute store result storage gm4_reeling_rods:temp item_data.Motion[1] double 0.1 run scoreboard players get $motionY gm4_reeling_rods.math +execute store result storage gm4_reeling_rods:temp item_data.Motion[2] double 0.1 run scoreboard players get $motionZ gm4_reeling_rods.math + +# Square the distances on each axis +scoreboard players operation $motionX gm4_reeling_rods.math *= $motionX gm4_reeling_rods.math +scoreboard players operation $motionY gm4_reeling_rods.math *= $motionY gm4_reeling_rods.math +scoreboard players operation $motionZ gm4_reeling_rods.math *= $motionZ gm4_reeling_rods.math + +# Add the squares +scoreboard players operation $lookup_key gm4_reeling_rods.math = $motionX gm4_reeling_rods.math +scoreboard players operation $lookup_key gm4_reeling_rods.math += $motionY gm4_reeling_rods.math +execute store result storage gm4_reeling_rods:temp lookup_key int 1 \ + run scoreboard players operation $lookup_key gm4_reeling_rods.math += $motionZ gm4_reeling_rods.math + +# Get Y motion, scaled up to match the squared values of before +execute store result score $motionY gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp item_data.Motion[1] 100 + +# Add looked up value to motionY above +function gm4_reeling_rods:get_lookup with storage gm4_reeling_rods:temp + +# Store the Completed motionY +execute store result storage gm4_reeling_rods:temp item_data.Motion[1] double 0.01 run scoreboard players get $motionY gm4_reeling_rods.math diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/end_crystal.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/end_crystal.mcfunction new file mode 100644 index 0000000000..2d8b8e5acc --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/end_crystal.mcfunction @@ -0,0 +1,6 @@ +# Action for hooked end_crystal +# @s = end_crystal +# at bobber in @s +# run from hooked_entity/select_type + +damage @s 1 minecraft:player_attack by @p[tag=gm4_reeling_rods.player] diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/is_passenger.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/is_passenger.mcfunction new file mode 100644 index 0000000000..4094996fa6 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/is_passenger.mcfunction @@ -0,0 +1,6 @@ +# checks if @s is a passenger +# @s = entity to check +# at @s +# run from hooked_entity/select_type + +return run execute on vehicle if entity @s diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/item_frame.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/item_frame.mcfunction new file mode 100644 index 0000000000..3d6db6119e --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/item_frame.mcfunction @@ -0,0 +1,19 @@ +# Action for hooked item frame or glow item frame +# @s = item frame or glow item frame +# at bobber in @s +# with {type} +# run from hooked_entity/select_type + +# fail if fixed +execute if data entity @s {Fixed:1b} run return fail + +$data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"$(type)",count:1} +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s Item +execute at @s align xz positioned ~0.5 ~ ~0.5 run function gm4_reeling_rods:pull_items +execute unless data entity @s Item run return run kill @s +data remove entity @s Item + +$execute if data storage gm4_reeling_rods:temp {item_data:{Item:{id:"$(type)"}}} \ + run return run playsound minecraft:entity.item_frame.break neutral @a[distance=..16] ~ ~ ~ + +playsound minecraft:entity.item_frame.remove_item neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/leash_knot/action.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/leash_knot/action.mcfunction new file mode 100644 index 0000000000..b32d05023f --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/leash_knot/action.mcfunction @@ -0,0 +1,15 @@ +# Action for hooked leash knot +# @s = leash knot +# at bobber in @s +# run from hooked_entity/select_type + +tag @s add gm4_reeling_rods.leash_knot + +# distance=..12 is leash distance +execute at @s as @e[type=#gm4_reeling_rods:leashable,distance=..12] \ + if function gm4_reeling_rods:hooked_entity/leash_knot/leaded_by_knot \ + run function gm4_reeling_rods:hooked_entity/leash_knot/change_leader + +kill @s + +execute at @p[tag=gm4_reeling_rods.player] run playsound minecraft:entity.leash_knot.place neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/leash_knot/change_leader.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/leash_knot/change_leader.mcfunction new file mode 100644 index 0000000000..b05ffcb826 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/leash_knot/change_leader.mcfunction @@ -0,0 +1,7 @@ +# Changes a leashed entities leader from a leash knot to a tagged player +# @s = entity leaded to leash knot +# at leash knot +# run from hooked_entity/leash_knot/action + +data remove entity @s leash +data modify entity @s leash.UUID set from entity @p[tag=gm4_reeling_rods.player] UUID diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/leash_knot/leaded_by_knot.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/leash_knot/leaded_by_knot.mcfunction new file mode 100644 index 0000000000..2d8177a07b --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/leash_knot/leaded_by_knot.mcfunction @@ -0,0 +1,6 @@ +# Checks if an entity is leashed by the knot in question +# @s = a leashable entity +# at owner +# run from hooked_entity/leash_knot/action + +return run execute on leasher if entity @s[tag=gm4_reeling_rods.leash_knot] diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/painting.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/painting.mcfunction new file mode 100644 index 0000000000..52b146d268 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/painting.mcfunction @@ -0,0 +1,10 @@ +# Action for hooked painting +# @s = painting +# at bobber in @s +# run from hooked_entity/select_type + +data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:painting",count:1} +execute at @s align xz positioned ~0.5 ~ ~0.5 run function gm4_reeling_rods:pull_items + +kill @s +playsound minecraft:entity.painting.break neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/select_type.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/select_type.mcfunction new file mode 100644 index 0000000000..4ce4eb8462 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/select_type.mcfunction @@ -0,0 +1,27 @@ +# Selects the right entity type or dismounts the entity. +# @s = hooked entity +# at bobber in entity +# run from player/find_hooked_entity + +# apply barbed damage +execute if data storage gm4_reeling_rods:temp enchanted.barbed if data entity @s Health unless entity @s[type=player,gamemode=creative] \ + run function gm4_reeling_rods:barbed/apply with storage gm4_reeling_rods:temp enchanted.barbed +execute if data storage gm4_reeling_rods:temp enchanted.barbed if entity @s[type=minecraft:tnt_minecart] \ + run return run data modify entity @s fuse set value 0s + +raw # non-dismountable entities +for entity in ctx.meta['non_dismountable_entities']: + if entity['needs_reeling'].as_bool(): + execute if entity @s[type=entity['id']] run return run execute if data storage gm4_reeling_rods:temp enchanted.reeling run function entity['function'] + else: + execute if entity @s[type=entity['id']] run return run function entity['function'] + +raw # dismounting logic +execute if function gm4_reeling_rods:hooked_entity/is_passenger run return run ride @s dismount + +raw # dismountable entities +for entity in ctx.meta['dismountable_entities']: + if entity['needs_reeling'].as_bool(): + execute if entity @s[type=entity['id']] run return run execute if data storage gm4_reeling_rods:temp enchanted.reeling run function entity['function'] + else: + execute if entity @s[type=entity['id']] run return run function entity['function'] diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/shulker.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/shulker.mcfunction new file mode 100644 index 0000000000..fff2b7575b --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/hooked_entity/shulker.mcfunction @@ -0,0 +1,6 @@ +# Action for hooked shulker +# @s = shulker +# at bobber in @s +# run from hooked_entity/select_type + +execute at @s facing entity @a[tag=gm4_reeling_rods.player,distance=..33,limit=1] eyes if block ^ ^ ^1 #gm4:replaceable run tp @s ^ ^ ^1 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/id/clear.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/clear.mcfunction new file mode 100644 index 0000000000..2b12ec093b --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/clear.mcfunction @@ -0,0 +1,21 @@ +# clears id of @s +# @s = entity with tag gm4_reeling_rods.id.tagged +# run from id/loop + +scoreboard players reset @s gm4_reeling_rods.id_bit.0 +scoreboard players reset @s gm4_reeling_rods.id_bit.1 +scoreboard players reset @s gm4_reeling_rods.id_bit.2 +scoreboard players reset @s gm4_reeling_rods.id_bit.3 +scoreboard players reset @s gm4_reeling_rods.id_bit.4 +scoreboard players reset @s gm4_reeling_rods.id_bit.5 +scoreboard players reset @s gm4_reeling_rods.id_bit.6 +scoreboard players reset @s gm4_reeling_rods.id_bit.7 +scoreboard players reset @s gm4_reeling_rods.id_bit.8 +scoreboard players reset @s gm4_reeling_rods.id_bit.9 +scoreboard players reset @s gm4_reeling_rods.id_bit.10 +scoreboard players reset @s gm4_reeling_rods.id_bit.11 +scoreboard players reset @s gm4_reeling_rods.id_bit.12 +scoreboard players reset @s gm4_reeling_rods.id_bit.13 +scoreboard players reset @s gm4_reeling_rods.id_bit.14 +scoreboard players reset @s gm4_reeling_rods.id_bit.15 +tag @s remove gm4_reeling_rods.id.tagged diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/id/get_next.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/get_next.mcfunction new file mode 100644 index 0000000000..12c42af8c9 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/get_next.mcfunction @@ -0,0 +1,57 @@ +# Gets the next id +# @s = entity to be assigned id +# at @s +# run from id/set + +## Binary Counter +# change bit 0 -> 1, return nothing else to do +# change bit 1 -> 0, then go on to next bit + +# bit.0 +execute if score $next gm4_reeling_rods.id_bit.0 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.0 1 +scoreboard players set $next gm4_reeling_rods.id_bit.0 0 +# bit.1 +execute if score $next gm4_reeling_rods.id_bit.1 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.1 1 +scoreboard players set $next gm4_reeling_rods.id_bit.1 0 +# bit.2 +execute if score $next gm4_reeling_rods.id_bit.2 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.2 1 +scoreboard players set $next gm4_reeling_rods.id_bit.2 0 +# bit.3 +execute if score $next gm4_reeling_rods.id_bit.3 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.3 1 +scoreboard players set $next gm4_reeling_rods.id_bit.3 0 +# bit.4 +execute if score $next gm4_reeling_rods.id_bit.4 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.4 1 +scoreboard players set $next gm4_reeling_rods.id_bit.4 0 +# bit.5 +execute if score $next gm4_reeling_rods.id_bit.5 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.5 1 +scoreboard players set $next gm4_reeling_rods.id_bit.5 0 +# bit.6 +execute if score $next gm4_reeling_rods.id_bit.6 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.6 1 +scoreboard players set $next gm4_reeling_rods.id_bit.6 0 +# bit.7 +execute if score $next gm4_reeling_rods.id_bit.7 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.7 1 +scoreboard players set $next gm4_reeling_rods.id_bit.7 0 +# bit.8 +execute if score $next gm4_reeling_rods.id_bit.8 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.8 1 +scoreboard players set $next gm4_reeling_rods.id_bit.8 0 +# bit.9 +execute if score $next gm4_reeling_rods.id_bit.9 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.9 1 +scoreboard players set $next gm4_reeling_rods.id_bit.9 0 +# bit.10 +execute if score $next gm4_reeling_rods.id_bit.10 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.10 1 +scoreboard players set $next gm4_reeling_rods.id_bit.10 0 +# bit.11 +execute if score $next gm4_reeling_rods.id_bit.11 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.11 1 +scoreboard players set $next gm4_reeling_rods.id_bit.11 0 +# bit.12 +execute if score $next gm4_reeling_rods.id_bit.12 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.12 1 +scoreboard players set $next gm4_reeling_rods.id_bit.12 0 +# bit.13 +execute if score $next gm4_reeling_rods.id_bit.13 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.13 1 +scoreboard players set $next gm4_reeling_rods.id_bit.13 0 +# bit.14 +execute if score $next gm4_reeling_rods.id_bit.14 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.14 1 +scoreboard players set $next gm4_reeling_rods.id_bit.14 0 +# bit.15 +execute if score $next gm4_reeling_rods.id_bit.15 matches 0 run return run scoreboard players set $next gm4_reeling_rods.id_bit.15 1 +scoreboard players set $next gm4_reeling_rods.id_bit.15 0 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/id/loop.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/loop.mcfunction new file mode 100644 index 0000000000..2fc18e92c5 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/loop.mcfunction @@ -0,0 +1,8 @@ +# checks for bobbers and stops when there are none +# run from player/cast_line and scheduled from id/select_entities + +# assign new ids if there's a bobber +execute as @e[type=minecraft:fishing_bobber] at @s run return run function gm4_reeling_rods:id/select_entities + +# no fishing bobber, clear ids +execute as @e[tag=gm4_reeling_rods.id.tagged] run function gm4_reeling_rods:id/clear diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/id/select_entities.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/select_entities.mcfunction new file mode 100644 index 0000000000..7f0071927d --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/select_entities.mcfunction @@ -0,0 +1,11 @@ +# selects entities to assign an id and schedules the loop to run again +# @s = fishing_bobber +# at @s +# run from id/loop + +# set new id tags if needed +# distance from bobber to entity is ..42 as that represents a vanilla entity of 3.28 blocks tall at a max of 16x scale and then 80% of the height to find the fishing bobber +execute as @e[type=!#gm4_reeling_rods:ignore,tag=!gm4_reeling_rods.id.tagged,distance=..42] at @s run function gm4_reeling_rods:id/set + +# schedule again, since bobber still exists +schedule function gm4_reeling_rods:id/loop 2t diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/id/set.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/set.mcfunction new file mode 100644 index 0000000000..0bf1187a05 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/id/set.mcfunction @@ -0,0 +1,26 @@ +# set an id on an entity +# @s = entity to be assigned id +# at @s +# run from id/select_entities + +# get new id +function gm4_reeling_rods:id/get_next + +# assign new id +scoreboard players operation @s gm4_reeling_rods.id_bit.0 = $next gm4_reeling_rods.id_bit.0 +scoreboard players operation @s gm4_reeling_rods.id_bit.1 = $next gm4_reeling_rods.id_bit.1 +scoreboard players operation @s gm4_reeling_rods.id_bit.2 = $next gm4_reeling_rods.id_bit.2 +scoreboard players operation @s gm4_reeling_rods.id_bit.3 = $next gm4_reeling_rods.id_bit.3 +scoreboard players operation @s gm4_reeling_rods.id_bit.4 = $next gm4_reeling_rods.id_bit.4 +scoreboard players operation @s gm4_reeling_rods.id_bit.5 = $next gm4_reeling_rods.id_bit.5 +scoreboard players operation @s gm4_reeling_rods.id_bit.6 = $next gm4_reeling_rods.id_bit.6 +scoreboard players operation @s gm4_reeling_rods.id_bit.7 = $next gm4_reeling_rods.id_bit.7 +scoreboard players operation @s gm4_reeling_rods.id_bit.8 = $next gm4_reeling_rods.id_bit.8 +scoreboard players operation @s gm4_reeling_rods.id_bit.9 = $next gm4_reeling_rods.id_bit.9 +scoreboard players operation @s gm4_reeling_rods.id_bit.10 = $next gm4_reeling_rods.id_bit.10 +scoreboard players operation @s gm4_reeling_rods.id_bit.11 = $next gm4_reeling_rods.id_bit.11 +scoreboard players operation @s gm4_reeling_rods.id_bit.12 = $next gm4_reeling_rods.id_bit.12 +scoreboard players operation @s gm4_reeling_rods.id_bit.13 = $next gm4_reeling_rods.id_bit.13 +scoreboard players operation @s gm4_reeling_rods.id_bit.14 = $next gm4_reeling_rods.id_bit.14 +scoreboard players operation @s gm4_reeling_rods.id_bit.15 = $next gm4_reeling_rods.id_bit.15 +tag @s add gm4_reeling_rods.id.tagged diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/init.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/init.mcfunction new file mode 100644 index 0000000000..fde93b9391 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/init.mcfunction @@ -0,0 +1,35 @@ +execute unless score reeling_rods gm4_modules matches 1 run data modify storage gm4:log queue append value {type:"install",module:"Reeling Rods"} +execute unless score reeling_rods gm4_earliest_version < reeling_rods gm4_modules run scoreboard players operation reeling_rods gm4_earliest_version = reeling_rods gm4_modules +scoreboard players set reeling_rods gm4_modules 1 + +scoreboard objectives add gm4_reeling_rods.math dummy +scoreboard objectives add gm4_reeling_rods.lookup dummy +scoreboard objectives add gm4_reeling_rods.barbed_damage_timer dummy +scoreboard objectives add gm4_reeling_rods.barbed_damage_period dummy +scoreboard objectives add gm4_reeling_rods.barbed_attacker_uuid0 dummy +scoreboard objectives add gm4_reeling_rods.barbed_attacker_uuid1 dummy +scoreboard objectives add gm4_reeling_rods.barbed_attacker_uuid2 dummy +scoreboard objectives add gm4_reeling_rods.barbed_attacker_uuid3 dummy +scoreboard objectives add gm4_reeling_rods.rods_cast minecraft.used:minecraft.fishing_rod +# id +scoreboard objectives add gm4_reeling_rods.id_bit.0 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.1 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.2 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.3 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.4 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.5 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.6 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.7 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.8 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.9 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.10 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.11 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.12 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.13 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.14 dummy +scoreboard objectives add gm4_reeling_rods.id_bit.15 dummy + +# set_lookup_table is generated in generate_files.py +function gm4_reeling_rods:set_lookup_table + +schedule function gm4_reeling_rods:tick 5t diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/player/cast_line.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/player/cast_line.mcfunction new file mode 100644 index 0000000000..bee0f7935c --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/player/cast_line.mcfunction @@ -0,0 +1,7 @@ +# sets rods_cast to 0 and schedules id loop +# @s = player, scores={gm4_reeling_rods.rods_cast=1..} +# at @s +# run from tick + +scoreboard players set @s gm4_reeling_rods.rods_cast 0 +function gm4_reeling_rods:id/loop diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/player/find_hooked_entity.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/player/find_hooked_entity.mcfunction new file mode 100644 index 0000000000..add3c5e232 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/player/find_hooked_entity.mcfunction @@ -0,0 +1,31 @@ +# Finds the entity the player hooked +# @s = player who fished +# at @s +# with {bit_0, bit_1, bit_2, bit_3, bit_4, bit_5, bit_6, bit_7, bit_8, bit_9, bit_10, bit_11, bit_12, bit_13, bit_14, bit_15} +# run from player/received_bit + +# store fishing rod & caster properties +data remove storage gm4_reeling_rods:temp enchanted +execute if predicate gm4_reeling_rods:holding_reeling_rod run data modify storage gm4_reeling_rods:temp enchanted.reeling set value 1 +execute if predicate gm4_reeling_rods:holding_barbed_rod/level_1 run data modify storage gm4_reeling_rods:temp enchanted.barbed set value {period: 31,damage:3} +execute if predicate gm4_reeling_rods:holding_barbed_rod/level_2 run data modify storage gm4_reeling_rods:temp enchanted.barbed set value {period: 26,damage:6} +execute if predicate gm4_reeling_rods:holding_barbed_rod/level_3 run data modify storage gm4_reeling_rods:temp enchanted.barbed set value {period: 21,damage:9} +execute if predicate gm4_reeling_rods:holding_barbed_rod/level_4 run data modify storage gm4_reeling_rods:temp enchanted.barbed set value {period: 16,damage:12} +execute if predicate gm4_reeling_rods:holding_barbed_rod/level_5 run data modify storage gm4_reeling_rods:temp enchanted.barbed set value {period: 11,damage:15} +data modify storage gm4_reeling_rods:temp player_data.Pos set from entity @s Pos +execute store result score $motionX gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp player_data.Pos[0] 1 +execute store result score $motionY gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp player_data.Pos[1] 1 +execute store result score $motionZ gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp player_data.Pos[2] 1 + +tag @s add gm4_reeling_rods.player + +# distance from bobber to entity is ..42 as that represents a vanilla entity of 3.28 blocks tall at a max of 16x scale and then 80% of the height to find the fishing bobber +$execute as @e[type=minecraft:fishing_bobber,distance=..33] \ + if function gm4_reeling_rods:player/owns_bobber \ + at @s as @e[\ + distance=..42, limit=1, type=!#gm4_reeling_rods:ignore, \ + scores={$(bit_0),$(bit_1),$(bit_2),$(bit_3),$(bit_4),$(bit_5),$(bit_6),$(bit_7),$(bit_8),$(bit_9),$(bit_10),$(bit_11),$(bit_12),$(bit_13),$(bit_14),$(bit_15)}\ + ] unless entity @s[tag=smithed.entity] unless data entity @s {Invulnerable:1b} \ + run function gm4_reeling_rods:hooked_entity/select_type + +tag @s remove gm4_reeling_rods.player diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/player/owns_bobber.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/player/owns_bobber.mcfunction new file mode 100644 index 0000000000..da45021cf7 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/player/owns_bobber.mcfunction @@ -0,0 +1,6 @@ +# Checks if a fishing bobber belongs to the targeted owner +# @s = a fishing bobber +# at owner +# run from player/find_hooked_entity + +return run execute on origin if entity @s[tag=gm4_reeling_rods.player] diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/player/received_bit.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/player/received_bit.mcfunction new file mode 100644 index 0000000000..8bd8354fe9 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/player/received_bit.mcfunction @@ -0,0 +1,17 @@ +# Logic for when a player receives a bit +# @s = player who received a bit +# at @s +# with {bit, UUID} +# run from player/bit_{bit}_{value} + +$data modify storage gm4_reeling_rods:players "$(UUID)".bit_$(bit) set from storage gm4_reeling_rods:temp bit_data.bit_score + +# fail if not all bits +$execute store result score $bit_count gm4_reeling_rods.math run data get storage gm4_reeling_rods:players "$(UUID)" +execute unless score $bit_count gm4_reeling_rods.math matches 16 run return fail + +# all bits received +$function gm4_reeling_rods:player/find_hooked_entity with storage gm4_reeling_rods:players "$(UUID)" + +# clear storage +$data remove storage gm4_reeling_rods:players "$(UUID)" diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/pull_items.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/pull_items.mcfunction new file mode 100644 index 0000000000..b809ad1f84 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/pull_items.mcfunction @@ -0,0 +1,13 @@ +# Separates an entity that needs it +# @s = entity with items to be yoinked +# at bobber in @s (most of the time) +# run from hooked_entity/* & reeling/* & reeling/*/action & reeling/stealable/steal_slot/* + +function gm4_reeling_rods:get_motion_to_player +function gm4_reeling_rods:summon_item with storage gm4_reeling_rods:temp + +execute unless data entity @s Items[] run return 0 + +# Entities with Items tag +data modify storage gm4_reeling_rods:temp motion_vector set from storage gm4_reeling_rods:temp entity_data.Motion +function gm4_reeling_rods:reeling/empty_container_entity diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/bee.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/bee.mcfunction new file mode 100644 index 0000000000..7f714d28ac --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/bee.mcfunction @@ -0,0 +1,16 @@ +# Action for reeled bee +# @s = bee +# at bobber in @s +# run from hooked_entity/select_type + +# fail if no nectar +execute unless data entity @s {HasNectar:1b} run return fail + +# Steal +data modify storage gm4_reeling_rods:temp item_data set value {} +data merge entity @s {HasNectar:0b,AngerTime:300} +data modify entity @s AngryAt set from entity @p[tag=gm4_reeling_rods.player] UUID +data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:honeycomb",count:1} +function gm4_reeling_rods:pull_items + +playsound entity.bee.hurt neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/chest_boat/action.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/chest_boat/action.mcfunction new file mode 100644 index 0000000000..9f52a08f75 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/chest_boat/action.mcfunction @@ -0,0 +1,21 @@ +# Action for reeled chest_boat +# @s = chest_boat type +# at bobber in @s +# with {boat_type} +# run from hooked_entity/select_type + +# steal +data modify storage gm4_reeling_rods:temp item_data set value {} +data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:chest",count:1} +execute positioned ~ ~0.3 ~ run function gm4_reeling_rods:pull_items + +# replace with boat +data modify storage gm4_reeling_rods:temp entity_data set from entity @s +data remove storage gm4_reeling_rods:temp entity_data.UUID +data remove storage gm4_reeling_rods:temp entity_data.Passengers +$data modify storage gm4_reeling_rods:temp entity_type set value "$(boat_type)" +execute at @s run function gm4_reeling_rods:reeling/summon_entity with storage gm4_reeling_rods:temp +execute at @s on passengers run function gm4_reeling_rods:reeling/chest_boat/passenger_transfer +tp @s ~ -1000 ~ + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/chest_boat/passenger_transfer.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/chest_boat/passenger_transfer.mcfunction new file mode 100644 index 0000000000..6ea64eff5f --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/chest_boat/passenger_transfer.mcfunction @@ -0,0 +1,7 @@ +# transfer old passenger to new boat +# @s = passengers of chest boat type +# at old chest boat type +# run from reeling/chest_boat/action + +ride @s dismount +ride @s mount @e[type=#gm4:boats,distance=..0.00001,limit=1] diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/chested_horse.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/chested_horse.mcfunction new file mode 100644 index 0000000000..8c9ced17b5 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/chested_horse.mcfunction @@ -0,0 +1,8 @@ +# Action for reeled #gm4_reeling_rods:chested_horse +# @s = #gm4_reeling_rods:chested_horse +# at bobber in @s +# run from hooked_entity/select_type + +# chest, then saddle +execute unless function gm4_reeling_rods:reeling/stealable/steal_slot/chested_horse \ + run function gm4_reeling_rods:reeling/stealable/steal_slot/saddle diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/empty_container_entity.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/empty_container_entity.mcfunction new file mode 100644 index 0000000000..43007ed4ab --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/empty_container_entity.mcfunction @@ -0,0 +1,35 @@ +# Loops through Items[] and creates an item entity for each item, setting a slightly random motion +# @s = entity with an Items[] tag +# at @s +# run from pull_items + +# Assumptions +# | storage gm4_reeling_rods:temp motion_vector is a Motion[] vector that reaches player +# | in storage gm4_reeling_rods:temp entity_data is an Items[] array of item data objects + +# pull item data to be processed +data modify storage gm4_reeling_rods:temp item_data.Item set from storage gm4_reeling_rods:temp entity_data.Items[0] + +# randomize motion slightly.... +execute store result score $motionX gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp motion_vector[0] 100 +execute store result score $motionY gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp motion_vector[1] 100 +execute store result score $motionZ gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp motion_vector[2] 100 +execute store result score $randomX gm4_reeling_rods.math run random value -10..10 +execute store result score $randomY gm4_reeling_rods.math run random value 0..10 +execute store result score $randomZ gm4_reeling_rods.math run random value -10..10 +execute store result storage gm4_reeling_rods:temp item_data.Motion[0] double 0.006 run \ + scoreboard players operation $motionX gm4_reeling_rods.math += $randomX gm4_reeling_rods.math +execute store result storage gm4_reeling_rods:temp item_data.Motion[1] double 0.006 run \ + scoreboard players operation $motionY gm4_reeling_rods.math += $randomY gm4_reeling_rods.math +execute store result storage gm4_reeling_rods:temp item_data.Motion[2] double 0.006 run \ + scoreboard players operation $motionZ gm4_reeling_rods.math += $randomZ gm4_reeling_rods.math +# scale 0.01 for same magnitude as main item, currently 0.006 to be slower + +# summon item with data +function gm4_reeling_rods:summon_item with storage gm4_reeling_rods:temp + +# remove processed item +data remove storage gm4_reeling_rods:temp entity_data.Items[0] + +# run again if needed +execute if data storage gm4_reeling_rods:temp entity_data.Items[] run function gm4_reeling_rods:reeling/empty_container_entity diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/enderman/action.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/enderman/action.mcfunction new file mode 100644 index 0000000000..88c5ac2e2e --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/enderman/action.mcfunction @@ -0,0 +1,31 @@ +# Action for reeled enderman +# @s = enderman +# at bobber in @s +# run from hooked_entity/select_type + +# fail if no held block +execute unless data entity @s carriedBlockState run return fail + +## determine summon location +# | bobber sits at 80% up the hitbox, we want 30% up from the feet for the held block, which is also 50% of the hitbox height down from the bobber +# | this works out to taking 62.5% of the height from feet to bobber, and going down from the bobber that far +# | we can achieve this by dividing a 100x scaled up difference of feet and bobber height by 16 + +# bobber height +execute summon marker run function gm4_reeling_rods:get_execution_pos +# | position stored in storage gm4_reeling_rods:temp position +execute store result score $bobberY gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp position[1] 100 + +# feet height +execute at @s summon marker run function gm4_reeling_rods:get_execution_pos +# | position stored in storage gm4_reeling_rods:temp position +execute store result score $feetY gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp position[1] 100 + +scoreboard players operation $bobberY gm4_reeling_rods.math -= $feetY gm4_reeling_rods.math + +scoreboard players set #16 gm4_reeling_rods.math 16 +execute store result storage gm4_reeling_rods:temp displacement float 0.1 \ + run scoreboard players operation $bobberY gm4_reeling_rods.math /= #16 gm4_reeling_rods.math + +# use this as a macro for the falling block displacement +function gm4_reeling_rods:reeling/enderman/falling_block with storage gm4_reeling_rods:temp diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/enderman/falling_block.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/enderman/falling_block.mcfunction new file mode 100644 index 0000000000..2bfff2fa39 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/enderman/falling_block.mcfunction @@ -0,0 +1,14 @@ +# Steal falling block of the enderman's held block +# @s = enderman +# at bobber in @s +# with {displacement} +# run from reeling/enderman/action + +data modify storage gm4_reeling_rods:temp entity_data set value {} +$execute positioned ~ ~-$(displacement) ~ run function gm4_reeling_rods:get_motion_to_player +# | motion vector stored in gm4_reeling_rods:temp item_data.Motion +data modify storage gm4_reeling_rods:temp entity_type set value "minecraft:falling_block" +data modify storage gm4_reeling_rods:temp entity_data.Motion set from storage gm4_reeling_rods:temp item_data.Motion +data modify storage gm4_reeling_rods:temp entity_data.BlockState set from entity @s carriedBlockState +data remove entity @s carriedBlockState +$execute positioned ~ ~-$(displacement) ~ run function gm4_reeling_rods:reeling/summon_entity with storage gm4_reeling_rods:temp diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/horse.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/horse.mcfunction new file mode 100644 index 0000000000..049fec52ad --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/horse.mcfunction @@ -0,0 +1,8 @@ +# Action for reeled horse +# @s = horse +# at bobber in @s +# run from hooked_entity/select_type + +# armor, then saddle +execute unless function gm4_reeling_rods:reeling/stealable/steal_slot/body \ + run function gm4_reeling_rods:reeling/stealable/steal_slot/saddle diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/llama.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/llama.mcfunction new file mode 100644 index 0000000000..43c3b59ea7 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/llama.mcfunction @@ -0,0 +1,8 @@ +# Action for reeled llama or trader llama +# @s = llama or trader llama +# at bobber in @s +# run from hooked_entity/select_type + +# chest, then carpet +execute unless function gm4_reeling_rods:reeling/stealable/steal_slot/chested_horse \ + run function gm4_reeling_rods:reeling/stealable/steal_slot/body diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/minecart.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/minecart.mcfunction new file mode 100644 index 0000000000..0c37bbb105 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/minecart.mcfunction @@ -0,0 +1,22 @@ +# Action for reeled *_minecart +# @s = *_minecart +# at bobber in @s +# with {block} +# run from hooked_entity/select_type + +# fail if passengers +execute if data entity @s Passengers run return fail + +# steal +data modify storage gm4_reeling_rods:temp item_data set value {} +$data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"$(block)",count:1} +function gm4_reeling_rods:pull_items + +# replace with minecart +data modify storage gm4_reeling_rods:temp entity_data set from entity @s +data remove storage gm4_reeling_rods:temp entity_data.UUID +data modify storage gm4_reeling_rods:temp entity_type set value "minecraft:minecart" +execute at @s run function gm4_reeling_rods:reeling/summon_entity with storage gm4_reeling_rods:temp +tp @s ~ -1000 ~ + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/mooshroom.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/mooshroom.mcfunction new file mode 100644 index 0000000000..87340c2908 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/mooshroom.mcfunction @@ -0,0 +1,24 @@ +# Action for reeled mooshroom +# @s = mooshroom +# at bobber in @s +# run from hooked_entity/select_type + +# fails +execute unless data entity @s {Age:0} run return fail +execute if data entity @s Passengers run return fail + +# steal +data modify storage gm4_reeling_rods:temp item_data set value {} +execute if data entity @s {Type:"red"} run data modify storage gm4_reeling_rods:temp item_data.Item.id set value "minecraft:red_mushroom" +execute if data entity @s {Type:"brown"} run data modify storage gm4_reeling_rods:temp item_data.Item.id set value "minecraft:brown_mushroom" +data modify storage gm4_reeling_rods:temp item_data.Item.count set value 5 +function gm4_reeling_rods:pull_items + +# replace with cow +data modify storage gm4_reeling_rods:temp entity_data set from entity @s +data remove storage gm4_reeling_rods:temp entity_data.UUID +data modify storage gm4_reeling_rods:temp entity_type set value "minecraft:cow" +execute at @s run function gm4_reeling_rods:reeling/summon_entity with storage gm4_reeling_rods:temp +tp @s ~ -1000 ~ + +playsound entity.mooshroom.shear neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/sheep.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/sheep.mcfunction new file mode 100644 index 0000000000..9eeeb74afb --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/sheep.mcfunction @@ -0,0 +1,30 @@ +# Action for reeled sheep +# @s = sheep +# at bobber in @s +# run from hooked_entity/select_type + +# fail if sheared +execute if data entity @s {Sheared:1} run return fail + +# steal +data modify entity @s Sheared set value true +data modify storage gm4_reeling_rods:temp item_data set value {} +execute if data entity @s {Color:0b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:white_wool",count:1} +execute if data entity @s {Color:1b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:orange_wool",count:1} +execute if data entity @s {Color:2b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:magenta_wool",count:1} +execute if data entity @s {Color:3b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:light_blue_wool",count:1} +execute if data entity @s {Color:4b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:yellow_wool",count:1} +execute if data entity @s {Color:5b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:lime_wool",count:1} +execute if data entity @s {Color:6b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:pink_wool",count:1} +execute if data entity @s {Color:7b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:gray_wool",count:1} +execute if data entity @s {Color:8b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:light_gray_wool",count:1} +execute if data entity @s {Color:9b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:cyan_wool",count:1} +execute if data entity @s {Color:10b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:purple_wool",count:1} +execute if data entity @s {Color:11b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:blue_wool",count:1} +execute if data entity @s {Color:12b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:brown_wool",count:1} +execute if data entity @s {Color:13b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:green_wool",count:1} +execute if data entity @s {Color:14b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:red_wool",count:1} +execute if data entity @s {Color:15b} run data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:black_wool",count:1} +function gm4_reeling_rods:pull_items + +playsound minecraft:entity.sheep.shear neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/snow_golem.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/snow_golem.mcfunction new file mode 100644 index 0000000000..8a5ee517f4 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/snow_golem.mcfunction @@ -0,0 +1,15 @@ +# Action for reeled snow_golem +# @s = snow_golem +# at bobber in @s +# run from hooked_entity/select_type + +# fail if no Pumpkin +execute unless data entity @s {Pumpkin:1b} run return fail + +# steal +data modify storage gm4_reeling_rods:temp item_data set value {} +data modify entity @s Pumpkin set value 0b +data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:carved_pumpkin",count:1} +function gm4_reeling_rods:pull_items + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/break_slot/mainhand.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/break_slot/mainhand.mcfunction new file mode 100644 index 0000000000..23d46220b5 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/break_slot/mainhand.mcfunction @@ -0,0 +1,8 @@ +# Break Mainhand Slot +# @s = #gm4_reeling_rods:steal_hand or #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/steal_slot/mainhand + +item replace entity @s weapon.mainhand with minecraft:air +playsound minecraft:entity.item.break neutral @a[distance=..16] ~ ~ ~ +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/check_drop_chance.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/check_drop_chance.mcfunction new file mode 100644 index 0000000000..bc6f1fb292 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/check_drop_chance.mcfunction @@ -0,0 +1,6 @@ +# checks drop chance against random +# run from reeling/stealable/steal_slot/* + +execute store result score $rand gm4_reeling_rods.math run random value 1..1000 +execute if score $rand gm4_reeling_rods.math <= $drop_chance gm4_reeling_rods.math run return 1 +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_1.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_1.mcfunction new file mode 100644 index 0000000000..53c7aef045 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_1.mcfunction @@ -0,0 +1,25 @@ +# Checks slots to steal +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/steal_equipment + +# 1 +execute if items entity @s weapon.mainhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/mainhand +# 3 +execute if items entity @s armor.head * unless items entity @s armor.head *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/head +# 5 +execute if items entity @s armor.legs * unless items entity @s armor.legs *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/legs +# 2 +execute if items entity @s weapon.offhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/offhand +# 4 +execute if items entity @s armor.chest * unless items entity @s armor.chest *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/chest +# 6 +execute if items entity @s armor.feet * unless items entity @s armor.feet *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/feet + +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_2.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_2.mcfunction new file mode 100644 index 0000000000..b60673774a --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_2.mcfunction @@ -0,0 +1,25 @@ +# Checks slots to steal +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/steal_equipment + +# 2 +execute if items entity @s weapon.offhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/offhand +# 4 +execute if items entity @s armor.chest * unless items entity @s armor.chest *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/chest +# 6 +execute if items entity @s armor.feet * unless items entity @s armor.feet *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/feet +# 1 +execute if items entity @s weapon.mainhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/mainhand +# 3 +execute if items entity @s armor.head * unless items entity @s armor.head *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/head +# 5 +execute if items entity @s armor.legs * unless items entity @s armor.legs *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/legs + +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_3.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_3.mcfunction new file mode 100644 index 0000000000..5a5399568c --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_3.mcfunction @@ -0,0 +1,25 @@ +# Checks slots to steal +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/steal_equipment + +# 3 +execute if items entity @s armor.head * unless items entity @s armor.head *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/head +# 5 +execute if items entity @s armor.legs * unless items entity @s armor.legs *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/legs +# 2 +execute if items entity @s weapon.offhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/offhand +# 4 +execute if items entity @s armor.chest * unless items entity @s armor.chest *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/chest +# 6 +execute if items entity @s armor.feet * unless items entity @s armor.feet *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/feet +# 1 +execute if items entity @s weapon.mainhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/mainhand + +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_4.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_4.mcfunction new file mode 100644 index 0000000000..e786d8157d --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_4.mcfunction @@ -0,0 +1,25 @@ +# Checks slots to steal +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/steal_equipment + +# 4 +execute if items entity @s armor.chest * unless items entity @s armor.chest *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/chest +# 6 +execute if items entity @s armor.feet * unless items entity @s armor.feet *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/feet +# 1 +execute if items entity @s weapon.mainhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/mainhand +# 3 +execute if items entity @s armor.head * unless items entity @s armor.head *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/head +# 5 +execute if items entity @s armor.legs * unless items entity @s armor.legs *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/legs +# 2 +execute if items entity @s weapon.offhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/offhand + +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_5.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_5.mcfunction new file mode 100644 index 0000000000..3b986da543 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_5.mcfunction @@ -0,0 +1,25 @@ +# Checks slots to steal +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/steal_equipment + +# 5 +execute if items entity @s armor.legs * unless items entity @s armor.legs *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/legs +# 2 +execute if items entity @s weapon.offhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/offhand +# 4 +execute if items entity @s armor.chest * unless items entity @s armor.chest *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/chest +# 6 +execute if items entity @s armor.feet * unless items entity @s armor.feet *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/feet +# 1 +execute if items entity @s weapon.mainhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/mainhand +# 3 +execute if items entity @s armor.head * unless items entity @s armor.head *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/head + +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_6.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_6.mcfunction new file mode 100644 index 0000000000..082a9a49d1 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/order/equipment_6.mcfunction @@ -0,0 +1,25 @@ +# Checks slots to steal +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/steal_equipment + +# 6 +execute if items entity @s armor.feet * unless items entity @s armor.feet *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/feet +# 1 +execute if items entity @s weapon.mainhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/mainhand +# 3 +execute if items entity @s armor.head * unless items entity @s armor.head *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/head +# 5 +execute if items entity @s armor.legs * unless items entity @s armor.legs *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/legs +# 2 +execute if items entity @s weapon.offhand * \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/offhand +# 4 +execute if items entity @s armor.chest * unless items entity @s armor.chest *[minecraft:enchantments={"minecraft:binding_curse":1}] \ + run return run function gm4_reeling_rods:reeling/stealable/steal_slot/chest + +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_equipment.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_equipment.mcfunction new file mode 100644 index 0000000000..69be3320af --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_equipment.mcfunction @@ -0,0 +1,13 @@ +# Pick an order to check equipment slots for stealing +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from hooked_entity/select_type & reeling/villager/action + +execute store result score $order gm4_reeling_rods.math run random value 1..6 + +execute if score $order gm4_reeling_rods.math matches 1 run return run function gm4_reeling_rods:reeling/stealable/order/equipment_1 +execute if score $order gm4_reeling_rods.math matches 2 run return run function gm4_reeling_rods:reeling/stealable/order/equipment_2 +execute if score $order gm4_reeling_rods.math matches 3 run return run function gm4_reeling_rods:reeling/stealable/order/equipment_3 +execute if score $order gm4_reeling_rods.math matches 4 run return run function gm4_reeling_rods:reeling/stealable/order/equipment_4 +execute if score $order gm4_reeling_rods.math matches 5 run return run function gm4_reeling_rods:reeling/stealable/order/equipment_5 +execute if score $order gm4_reeling_rods.math matches 6 run return run function gm4_reeling_rods:reeling/stealable/order/equipment_6 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_hand.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_hand.mcfunction new file mode 100644 index 0000000000..3b93d711b2 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_hand.mcfunction @@ -0,0 +1,12 @@ +# Pick an order to check hand slots for stealing +# @s = #gm4_reeling_rods:steal_hand +# at bobber in @s +# run from hooked_entity/select_type + +execute store result score $mainhand_first gm4_reeling_rods.math run random value 0..1 + +execute if score $mainhand_first gm4_reeling_rods.math matches 1 if items entity @s weapon.mainhand * run return run function gm4_reeling_rods:reeling/stealable/steal_slot/mainhand +execute if items entity @s weapon.offhand * run return run function gm4_reeling_rods:reeling/stealable/steal_slot/offhand +execute if score $mainhand_first gm4_reeling_rods.math matches 0 if items entity @s weapon.mainhand * run return run function gm4_reeling_rods:reeling/stealable/steal_slot/mainhand + +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/body.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/body.mcfunction new file mode 100644 index 0000000000..8a8b8f8564 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/body.mcfunction @@ -0,0 +1,17 @@ +# Steal Body +# @s = wolf, llama or horse +# at bobber in @s +# run from hooked_entity/select_type & reeling/llama & reeling/horse + +# fails +execute unless data entity @s equipment.body run return fail +execute if data entity @s {drop_chances:{body:0.0f}} run return run function gm4_reeling_rods:reeling/stealable/zero_chance + +# steal slot +data modify storage gm4_reeling_rods:temp item_data set value {} +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s equipment.body +function gm4_reeling_rods:pull_items +item replace entity @s armor.body with minecraft:air + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ +return 8 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/chest.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/chest.mcfunction new file mode 100644 index 0000000000..5ea5b9a4a1 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/chest.mcfunction @@ -0,0 +1,17 @@ +# Steal Chest +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/order/equipment_* + +# fail if 0% drop chance +execute if data entity @s {drop_chances:{chest:0.0f}} run return run function gm4_reeling_rods:reeling/stealable/zero_chance + +# steal slot +data modify storage gm4_reeling_rods:temp item_data.Item set value {} +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s equipment.chest +data modify storage gm4_reeling_rods:temp item_data.PickupDelay set value 10s +function gm4_reeling_rods:pull_items +item replace entity @s armor.chest with minecraft:air + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ +return 4 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/chested_horse.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/chested_horse.mcfunction new file mode 100644 index 0000000000..ac340ffee6 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/chested_horse.mcfunction @@ -0,0 +1,16 @@ +# Steal Chested Horse chest and items inside +# @s = #gm4_reeling_rods:chested_horse or llama / trader llama +# at bobber in @s +# run from reeling/llama & reeling/chested_horse + +# fail if not chested horse +execute unless data entity @s {ChestedHorse:1b} run return fail + +# steal slot +data modify storage gm4_reeling_rods:temp item_data set value {} +data modify storage gm4_reeling_rods:temp item_data.Item set value {id:"minecraft:chest",count:1} +function gm4_reeling_rods:pull_items +data modify entity @s ChestedHorse set value 0b + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ +return 9 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/feet.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/feet.mcfunction new file mode 100644 index 0000000000..522971108c --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/feet.mcfunction @@ -0,0 +1,17 @@ +# Steal Feet +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/order/equipment_* + +# fail if 0% drop chance +execute if data entity @s {drop_chances:{feet:0.0f}} run return run function gm4_reeling_rods:reeling/stealable/zero_chance + +# steal slot +data modify storage gm4_reeling_rods:temp item_data.Item set value {} +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s equipment.feet +data modify storage gm4_reeling_rods:temp item_data.PickupDelay set value 10s +function gm4_reeling_rods:pull_items +item replace entity @s armor.feet with minecraft:air + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ +return 6 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/head.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/head.mcfunction new file mode 100644 index 0000000000..72aadd04a8 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/head.mcfunction @@ -0,0 +1,17 @@ +# Steal Head +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/order/equipment_* + +# fail if 0% drop chance +execute if data entity @s {drop_chances:{head:0.0f}} run return run function gm4_reeling_rods:reeling/stealable/zero_chance + +# steal slot +data modify storage gm4_reeling_rods:temp item_data.Item set value {} +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s equipment.head +data modify storage gm4_reeling_rods:temp item_data.PickupDelay set value 10s +function gm4_reeling_rods:pull_items +item replace entity @s armor.head with minecraft:air + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ +return 3 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/legs.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/legs.mcfunction new file mode 100644 index 0000000000..d82c016ba0 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/legs.mcfunction @@ -0,0 +1,17 @@ +# Steal Legs +# @s = #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/order/equipment_* + +# fail if 0% drop chance +execute if data entity @s {drop_chances:{legs:0.0f}} run return run function gm4_reeling_rods:reeling/stealable/zero_chance + +# steal slot +data modify storage gm4_reeling_rods:temp item_data.Item set value {} +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s equipment.legs +data modify storage gm4_reeling_rods:temp item_data.PickupDelay set value 10s +function gm4_reeling_rods:pull_items +item replace entity @s armor.legs with minecraft:air + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ +return 5 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/mainhand.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/mainhand.mcfunction new file mode 100644 index 0000000000..91fee2d576 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/mainhand.mcfunction @@ -0,0 +1,27 @@ +# Steal Mainhand +# @s = #gm4_reeling_rods:steal_hand or #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/order/* and reeling/stealable/steal_hand + +## drop chance fail conditions +# to use default drop chances, we'd use 85 here as 8.5%, but we're setting it to 11.5% to match looting 3 chances +scoreboard players set $drop_chance gm4_reeling_rods.math 115 +execute if data entity @s drop_chances.mainhand store result score $drop_chance gm4_reeling_rods.math run data get entity @s drop_chances.mainhand 1000 +# villager and vex should ignore 0% drop chance on mainhand, otherwise fail if 0% +execute if entity @s[type=!vex,type=!villager] if score $drop_chance gm4_reeling_rods.math matches 0 run return run function gm4_reeling_rods:reeling/stealable/zero_chance +# drowned holding trident needs to roll chance +execute if entity @s[type=drowned] if items entity @s weapon.mainhand trident \ + unless function gm4_reeling_rods:reeling/stealable/check_drop_chance \ + run return run function gm4_reeling_rods:reeling/stealable/break_slot/mainhand + +## steal slot +data modify storage gm4_reeling_rods:temp item_data.Item set value {} +# need SelectedItem to work with players since players don't use equipment.mainhand +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s SelectedItem +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s equipment.mainhand +data modify storage gm4_reeling_rods:temp item_data.PickupDelay set value 10s +function gm4_reeling_rods:pull_items +item replace entity @s weapon.mainhand with minecraft:air + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ +return 1 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/offhand.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/offhand.mcfunction new file mode 100644 index 0000000000..8b50fc578a --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/offhand.mcfunction @@ -0,0 +1,17 @@ +# Steal Offhand +# @s = #gm4_reeling_rods:steal_hand or #gm4_reeling_rods:steal_equipment +# at bobber in @s +# run from reeling/stealable/order/* and reeling/stealable/steal_hand + +# fail if 0% drop chance +execute if data entity @s {drop_chances:{offhand:0.0f}} run return run function gm4_reeling_rods:reeling/stealable/zero_chance + +## steal slot +data modify storage gm4_reeling_rods:temp item_data.Item set value {} +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s equipment.offhand +data modify storage gm4_reeling_rods:temp item_data.PickupDelay set value 10s +function gm4_reeling_rods:pull_items +item replace entity @s weapon.offhand with minecraft:air + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ +return 2 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/saddle.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/saddle.mcfunction new file mode 100644 index 0000000000..284f8a74ef --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/steal_slot/saddle.mcfunction @@ -0,0 +1,17 @@ +# Steal Saddle +# @s = #gm4_reeling_rods:steal_saddle +# at bobber in @s +# run from hooked_entity/select_type + +# fails +execute unless data entity @s equipment.saddle run return fail +execute if data entity @s {drop_chances:{saddle:0.0f}} run return run function gm4_reeling_rods:reeling/stealable/zero_chance + +# steal slot +data modify storage gm4_reeling_rods:temp item_data set value {} +data modify storage gm4_reeling_rods:temp item_data.Item set from entity @s equipment.saddle +function gm4_reeling_rods:pull_items +item replace entity @s saddle with minecraft:air + +playsound minecraft:entity.item.pickup neutral @a[distance=..16] ~ ~ ~ +return 7 diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/zero_chance.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/zero_chance.mcfunction new file mode 100644 index 0000000000..2afb04172d --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/stealable/zero_chance.mcfunction @@ -0,0 +1,6 @@ +# slot has a 0% drop chance, play sound and fail +# at @s +# run from reeling/stealable/steal_slot/* + +playsound minecraft:item.spyglass.stop_using neutral @a[distance=16] ~ ~ ~ +return fail diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/summon_entity.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/summon_entity.mcfunction new file mode 100644 index 0000000000..9c3e279a4a --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/summon_entity.mcfunction @@ -0,0 +1,7 @@ +# Summons a generic entity with data +# @s = entity that was hooked +# at @s (unless run from enderman) +# with {entity_type, entity_data} +# run from reeling/chest_boat/action and reeling/{minecart|mooshroom} and reeling/enderman/falling_block + +$summon $(entity_type) ~ ~ ~ $(entity_data) diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/villager/action.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/villager/action.mcfunction new file mode 100644 index 0000000000..104fe35583 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/villager/action.mcfunction @@ -0,0 +1,26 @@ +# Action for reeled villager +# @s = villager +# at bobber in @s +# run from hooked_entity/select_type + +# store mainhand data for a potential trade steal +data modify storage gm4_reeling_rods:temp entity_data set value {} +data modify storage gm4_reeling_rods:temp entity_data.mainhand set from entity @s equipment.mainhand + +# try to steal +execute store result score $slot gm4_reeling_rods.math run function gm4_reeling_rods:reeling/stealable/steal_equipment +# if not mainhand, return +execute unless score $slot gm4_reeling_rods.math matches 1 run return fail + +## mainhand stolen (TRADED ITEM) + +# find trade and sell it out +function gm4_reeling_rods:reeling/villager/sell_out with storage gm4_reeling_rods:temp entity_data + +# add 20 "major_negative" gossip of the player to the villager +data modify storage gm4_reeling_rods:temp entity_data.gossip.Target set from entity @p[tag=gm4_reeling_rods.player] UUID +function gm4_reeling_rods:reeling/villager/add_gossip with storage gm4_reeling_rods:temp entity_data.gossip + +# feedback +particle minecraft:angry_villager ~ ~ ~ 0.3 0.3 0.3 20 3 +playsound minecraft:entity.villager.hurt neutral @a[distance=..16] ~ ~ ~ diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/villager/add_gossip.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/villager/add_gossip.mcfunction new file mode 100644 index 0000000000..124843ef67 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/villager/add_gossip.mcfunction @@ -0,0 +1,16 @@ +# adds a "major_negaive" gossip of the player to the villager +# @s = villager +# at bobber in @s +# with {Target} +# run from reeling/villager/action + +$execute store success score $success gm4_reeling_rods.math run \ + data modify storage gm4_reeling_rods:temp entity_data.gossip merge from entity @s Gossips[{Type:"major_negative",Target:$(Target)}] + +execute unless score $success gm4_reeling_rods.math matches 1 run data modify storage gm4_reeling_rods:temp entity_data.gossip merge value {Type:"major_negative",Value:0} + +execute store result score $gossip_value gm4_reeling_rods.math run data get storage gm4_reeling_rods:temp entity_data.gossip.Value +execute unless score $gossip_value gm4_reeling_rods.math matches ..80 run scoreboard players set $gossip_value gm4_reeling_rods.math 100 +execute if score $gossip_value gm4_reeling_rods.math matches ..80 run scoreboard players add $gossip_value gm4_reeling_rods.math 20 +execute store result storage gm4_reeling_rods:temp entity_data.gossip.Value int 1 run scoreboard players get $gossip_value gm4_reeling_rods.math +data modify entity @s Gossips append from storage gm4_reeling_rods:temp entity_data.gossip diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/villager/sell_out.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/villager/sell_out.mcfunction new file mode 100644 index 0000000000..1dc0f5d815 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/reeling/villager/sell_out.mcfunction @@ -0,0 +1,10 @@ +# sells out a trade +# @s = villager +# at bobber in @s +# with {mainhand} +# run from reeling/villager/action + +# for some reason on the first item after a restock?? it fails to set uses, but succeeds after that? This double set doesn't fix that though +# | needs more investigation +$data modify entity @s Offers.Recipes[{sell:$(mainhand)}] merge value {uses:0} +$data modify entity @s Offers.Recipes[{sell:$(mainhand)}].uses set from entity @s Offers.Recipes[{sell:$(mainhand)}].maxUses diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/summon_item.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/summon_item.mcfunction new file mode 100644 index 0000000000..91469011f3 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/summon_item.mcfunction @@ -0,0 +1,6 @@ +# Summons item with data +# @s = entity with items to be yoinked +# at bobber in @s (most of the time) +# run from pull_items & reeling/empty_container_entity + +$summon minecraft:item ~ ~ ~ $(item_data) diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/function/tick.mcfunction b/gm4_reeling_rods/data/gm4_reeling_rods/function/tick.mcfunction new file mode 100644 index 0000000000..dfcd00fbc3 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/function/tick.mcfunction @@ -0,0 +1,5 @@ +# checks if players have cast a line, then will assign ids to entities around bobber +execute as @a[scores={gm4_reeling_rods.rods_cast=1..}] run function gm4_reeling_rods:player/cast_line + +# 5 ticks is good enough response time +schedule function gm4_reeling_rods:tick 5t diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/guidebook/reeling_rods.json b/gm4_reeling_rods/data/gm4_reeling_rods/guidebook/reeling_rods.json new file mode 100644 index 0000000000..a2110fff92 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/guidebook/reeling_rods.json @@ -0,0 +1,146 @@ +{ + "id": "reeling_rods", + "name": "Reeling Rods", + "module_type": "module", + "icon": { + "id": "minecraft:fishing_rod" + }, + "criteria": { + "obtain_fishing_rod": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": "minecraft:fishing_rod" + } + ] + } + }, + "obtain_reeling_rod": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": "minecraft:fishing_rod", + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "gm4_reeling_rods:reeling" + } + ] + } + } + ] + } + }, + "obtain_barbed_rod": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": "minecraft:fishing_rod", + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "gm4_reeling_rods:barbed" + } + ] + } + } + ] + } + }, + "obtain_reeling_book": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": "minecraft:enchanted_book", + "predicates": { + "minecraft:stored_enchantments": [ + { + "enchantments": "gm4_reeling_rods:reeling" + } + ] + } + } + ] + } + }, + "obtain_barbed_book": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": "minecraft:enchanted_book", + "predicates": { + "minecraft:stored_enchantments": [ + { + "enchantments": "gm4_reeling_rods:barbed" + } + ] + } + } + ] + } + } + }, + "sections": [ + { + "name": "description", + "enable": [], + "requirements": [ + [ + "obtain_fishing_rod" + ] + ], + "pages": [ + [ + { + "insert": "title" + }, + { + "translate": "text.gm4.guidebook.reeling_rods.description", + "fallback": "Fishing rods can be useful tools for (accidental) home re-decoration: Paintings and Item Frames can be ripped of walls, whilst leashes and Shulkers are moved around with ease." + } + ] + ] + }, + { + "name": "reeling", + "enable": [], + "requirements": [ + [ + "obtain_reeling_rod", + "obtain_reeling_book" + ] + ], + "pages": [ + [ + { + "translate": "text.gm4.guidebook.reeling_rods.reeling", + "fallback": "When enchanted with Reeling, a fishing rod becomes a sneaky tool for disassembly and thievery. Take a Villager's wares or un-boat a chest boat chest." + } + ] + ] + }, + { + "name": "barbed", + "enable": [], + "requirements": [ + [ + "obtain_barbed_rod", + "obtain_barbed_book" + ] + ], + "pages": [ + [ + { + "translate": "text.gm4.guidebook.reeling_rods.barbed", + "fallback": "Barbed turns a fishing rod into a lethal weapon. Throw your bobber at foes to scratch them up! Higher levels cause more damage over time." + } + ] + ] + } + ] +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_1.json b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_1.json new file mode 100644 index 0000000000..71a4a8225b --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_1.json @@ -0,0 +1,18 @@ +{ + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "slots": { + "weapon.*": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "gm4_reeling_rods:barbed", + "levels": 1 + } + ] + } + } + } + } +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_2.json b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_2.json new file mode 100644 index 0000000000..9f4cf88480 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_2.json @@ -0,0 +1,18 @@ +{ + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "slots": { + "weapon.*": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "gm4_reeling_rods:barbed", + "levels": 2 + } + ] + } + } + } + } +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_3.json b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_3.json new file mode 100644 index 0000000000..2d60bcd513 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_3.json @@ -0,0 +1,18 @@ +{ + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "slots": { + "weapon.*": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "gm4_reeling_rods:barbed", + "levels": 3 + } + ] + } + } + } + } +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_4.json b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_4.json new file mode 100644 index 0000000000..8e2fd83d79 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_4.json @@ -0,0 +1,18 @@ +{ + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "slots": { + "weapon.*": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "gm4_reeling_rods:barbed", + "levels": 4 + } + ] + } + } + } + } +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_5.json b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_5.json new file mode 100644 index 0000000000..5059ebeb28 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_barbed_rod/level_5.json @@ -0,0 +1,18 @@ +{ + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "slots": { + "weapon.*": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "gm4_reeling_rods:barbed", + "levels": 5 + } + ] + } + } + } + } +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_reeling_rod.json b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_reeling_rod.json new file mode 100644 index 0000000000..cd7a1fba2e --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/predicate/holding_reeling_rod.json @@ -0,0 +1,17 @@ +{ + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "slots": { + "weapon.*": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "gm4_reeling_rods:reeling" + } + ] + } + } + } + } +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/chested_horse.json b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/chested_horse.json new file mode 100644 index 0000000000..4cd85e4a5b --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/chested_horse.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:donkey", + "minecraft:mule" + ] +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/ignore.json b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/ignore.json new file mode 100644 index 0000000000..dbb3066de7 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/ignore.json @@ -0,0 +1,39 @@ +{ + "values": [ + "minecraft:area_effect_cloud", + "minecraft:arrow", + "minecraft:block_display", + "minecraft:breeze_wind_charge", + "minecraft:command_block_minecart", + "minecraft:dragon_fireball", + "minecraft:egg", + "minecraft:ender_pearl", + "minecraft:evoker_fangs", + "minecraft:experience_bottle", + "minecraft:experience_orb", + "minecraft:eye_of_ender", + "minecraft:falling_block", + "minecraft:fireball", + "minecraft:firework_rocket", + "minecraft:fishing_bobber", + "minecraft:interaction", + "minecraft:item", + "minecraft:item_display", + "minecraft:lightning_bolt", + "minecraft:lingering_potion", + "minecraft:llama_spit", + "minecraft:marker", + "minecraft:ominous_item_spawner", + "minecraft:splash_potion", + "minecraft:shulker_bullet", + "minecraft:small_fireball", + "minecraft:snowball", + "minecraft:spawner_minecart", + "minecraft:spectral_arrow", + "minecraft:text_display", + "minecraft:tnt", + "minecraft:trident", + "minecraft:wind_charge", + "minecraft:wither_skull" + ] +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/leashable.json b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/leashable.json new file mode 100644 index 0000000000..162cc4b03e --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/leashable.json @@ -0,0 +1,38 @@ +{ + "values": [ + "#gm4:boats", + "#gm4:chest_boats", + "#gm4_reeling_rods:llamas", + "#gm4_reeling_rods:steal_saddle", + "minecraft:allay", + "minecraft:armadillo", + "minecraft:axolotl", + "minecraft:bee", + "minecraft:camel", + "minecraft:cat", + "minecraft:chicken", + "minecraft:cow", + "minecraft:dolphin", + "minecraft:donkey", + "minecraft:fox", + "minecraft:frog", + "minecraft:glow_squid", + "minecraft:goat", + { "id": "minecraft:happy_ghast", "required": false }, + "minecraft:hoglin", + "minecraft:horse", + "minecraft:iron_golem", + "minecraft:mooshroom", + "minecraft:mule", + "minecraft:ocelot", + "minecraft:parrot", + "minecraft:polar_bear", + "minecraft:rabbit", + "minecraft:sheep", + "minecraft:sniffer", + "minecraft:snow_golem", + "minecraft:squid", + "minecraft:wolf", + "minecraft:zoglin" + ] +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/llamas.json b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/llamas.json new file mode 100644 index 0000000000..4560fcfee3 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/llamas.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:llama", + "minecraft:trader_llama" + ] +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_body.json b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_body.json new file mode 100644 index 0000000000..b6bdf88134 --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_body.json @@ -0,0 +1,6 @@ +{ + "values": [ + { "id": "minecraft:happy_ghast", "required": false }, + "minecraft:wolf" + ] +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_equipment.json b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_equipment.json new file mode 100644 index 0000000000..4744b7d6be --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_equipment.json @@ -0,0 +1,17 @@ +{ + "values": [ + "minecraft:armor_stand", + "minecraft:bogged", + "minecraft:drowned", + "minecraft:husk", + "minecraft:piglin", + "minecraft:piglin_brute", + "minecraft:player", + "minecraft:skeleton", + "minecraft:stray", + "minecraft:wither_skeleton", + "minecraft:zombie", + "minecraft:zombie_villager", + "minecraft:zombified_piglin" + ] +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_hand.json b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_hand.json new file mode 100644 index 0000000000..1f4b11ed4e --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_hand.json @@ -0,0 +1,13 @@ +{ + "values": [ + "minecraft:allay", + "minecraft:fox", + "minecraft:illusioner", + "minecraft:panda", + "minecraft:pillager", + "minecraft:vex", + "minecraft:vindicator", + "minecraft:wandering_trader", + "minecraft:witch" + ] +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_saddle.json b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_saddle.json new file mode 100644 index 0000000000..aef60be58a --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/steal_saddle.json @@ -0,0 +1,9 @@ +{ + "values": [ + "minecraft:camel", + "minecraft:pig", + "minecraft:skeleton_horse", + "minecraft:strider", + "minecraft:zombie_horse" + ] +} diff --git a/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/support_death_message.json b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/support_death_message.json new file mode 100644 index 0000000000..bec44856dc --- /dev/null +++ b/gm4_reeling_rods/data/gm4_reeling_rods/tags/entity_type/support_death_message.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:cat", + "minecraft:parrot", + "minecraft:player", + "minecraft:wolf" + ] +} diff --git a/gm4_reeling_rods/data/minecraft/tags/enchantment/non_treasure.json b/gm4_reeling_rods/data/minecraft/tags/enchantment/non_treasure.json new file mode 100644 index 0000000000..5e9cb723ff --- /dev/null +++ b/gm4_reeling_rods/data/minecraft/tags/enchantment/non_treasure.json @@ -0,0 +1,6 @@ +{ + "values": [ + "gm4_reeling_rods:reeling", + "gm4_reeling_rods:barbed" + ] +} diff --git a/gm4_reeling_rods/entities.csv b/gm4_reeling_rods/entities.csv new file mode 100644 index 0000000000..58162aeafa --- /dev/null +++ b/gm4_reeling_rods/entities.csv @@ -0,0 +1,34 @@ +id,needs_reeling,can_dismount,function +#gm4_reeling_rods:chested_horse,TRUE,TRUE,"gm4_reeling_rods:reeling/chested_horse" +#gm4_reeling_rods:llamas,TRUE,TRUE,"gm4_reeling_rods:reeling/llama" +#gm4_reeling_rods:steal_body,TRUE,TRUE,"gm4_reeling_rods:reeling/stealable/steal_slot/body" +#gm4_reeling_rods:steal_equipment,TRUE,TRUE,"gm4_reeling_rods:reeling/stealable/steal_equipment" +#gm4_reeling_rods:steal_hand,TRUE,TRUE,"gm4_reeling_rods:reeling/stealable/steal_hand" +#gm4_reeling_rods:steal_saddle,TRUE,TRUE,"gm4_reeling_rods:reeling/stealable/steal_slot/saddle" +minecraft:bee,TRUE,TRUE,"gm4_reeling_rods:reeling/bee" +minecraft:enderman,TRUE,TRUE,"gm4_reeling_rods:reeling/enderman/action" +minecraft:horse,TRUE,TRUE,"gm4_reeling_rods:reeling/horse" +minecraft:mooshroom,TRUE,TRUE,"gm4_reeling_rods:reeling/mooshroom" +minecraft:sheep,TRUE,TRUE,"gm4_reeling_rods:reeling/sheep" +minecraft:snow_golem,TRUE,TRUE,"gm4_reeling_rods:reeling/snow_golem" +minecraft:villager,TRUE,TRUE,"gm4_reeling_rods:reeling/villager/action" +minecraft:chest_minecart,TRUE,FALSE,"gm4_reeling_rods:reeling/minecart {block:'minecraft:chest'}" +minecraft:furnace_minecart,TRUE,FALSE,"gm4_reeling_rods:reeling/minecart {block:'minecraft:furnace'}" +minecraft:hopper_minecart,TRUE,FALSE,"gm4_reeling_rods:reeling/minecart {block:'minecraft:hopper'}" +minecraft:tnt_minecart,TRUE,FALSE,"gm4_reeling_rods:reeling/minecart {block:'minecraft:tnt'}" +minecraft:acacia_chest_boat,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:acacia_boat'}" +minecraft:bamboo_chest_raft,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:bamboo_raft'}" +minecraft:birch_chest_boat,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:birch_boat'}" +minecraft:cherry_chest_boat,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:cherry_boat'}" +minecraft:dark_oak_chest_boat,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:dark_oak_boat'}" +minecraft:jungle_chest_boat,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:jungle_boat'}" +minecraft:mangrove_chest_boat,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:mangrove_boat'}" +minecraft:oak_chest_boat,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:oak_boat'}" +minecraft:pale_oak_chest_boat,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:pale_oak_boat'}" +minecraft:spruce_chest_boat,TRUE,FALSE,"gm4_reeling_rods:reeling/chest_boat/action {boat_type:'minecraft:spruce_boat'}" +minecraft:shulker,FALSE,TRUE,"gm4_reeling_rods:hooked_entity/shulker" +minecraft:end_crystal,FALSE,FALSE,"gm4_reeling_rods:hooked_entity/end_crystal" +minecraft:glow_item_frame,FALSE,FALSE,"gm4_reeling_rods:hooked_entity/item_frame {type:'minecraft:glow_item_frame'}" +minecraft:item_frame,FALSE,FALSE,"gm4_reeling_rods:hooked_entity/item_frame {type:'minecraft:item_frame'}" +minecraft:leash_knot,FALSE,FALSE,"gm4_reeling_rods:hooked_entity/leash_knot/action" +minecraft:painting,FALSE,FALSE,"gm4_reeling_rods:hooked_entity/painting" diff --git a/gm4_reeling_rods/generate_files.py b/gm4_reeling_rods/generate_files.py new file mode 100644 index 0000000000..f599decd72 --- /dev/null +++ b/gm4_reeling_rods/generate_files.py @@ -0,0 +1,72 @@ +from beet import Context, Advancement, Function +import math +from pathlib import Path +from gm4.utils import CSV, CSVRow +from itertools import product + +def beet_default(ctx: Context): + """ + - generates set_lookup_table.mcfunction + - generates advancements and reward functions for every bit state of an entity's scoreboard id + - reads csv to ctx.meta for hooked_entity/select_type.mcfunction + """ + create_lookup_file(ctx) + create_bit_advancements(ctx) + + entity_list = CSV.from_file(Path('gm4_reeling_rods','entities.csv')) + dismountable_entities: list[CSVRow] = [] + non_dismountable_entities: list[CSVRow] = [] + for entity_type in entity_list: + if entity_type['can_dismount'].as_bool(): + dismountable_entities.append(entity_type) + continue + non_dismountable_entities.append(entity_type) + ctx.meta['dismountable_entities'] = dismountable_entities + ctx.meta['non_dismountable_entities'] = non_dismountable_entities + +def create_lookup_file(ctx: Context): + ctx.data["gm4_reeling_rods:set_lookup_table"] = Function( + [ + f"scoreboard players set ${key} gm4_reeling_rods.lookup {value}" + for key, value in { + (x**2 + y**2 + z**2): int( + 100 * (0.08 * math.sqrt(math.sqrt(x**2 + y**2 + z**2))) + ) + for x, y, z in product(range(0, 34), range(0, 34), range(0, 34)) + }.items() if math.sqrt(key) <= 33 + ] + ) + +def create_bit_advancements(ctx: Context): + for bit in range(16): + for value in range(2): + ctx.data[f"gm4_reeling_rods:fished/bit_{bit}_{value}"] = Advancement({ + "criteria":{ + "fishing_rod_hooked":{ + "trigger":"minecraft:fishing_rod_hooked", + "conditions":{ + "entity": [ + { + "condition": "minecraft:entity_scores", + "entity": "this", + "scores": { + f"gm4_reeling_rods.id_bit.{bit}": value + } + } + ] + } + } + }, + "rewards":{ + "function": f"gm4_reeling_rods:player/bit_{bit}_{value}" + } + }) + ctx.data[f"gm4_reeling_rods:player/bit_{bit}_{value}"] = Function([ + f"# player adv logic for getting bit {bit} at value {value}. Generated by generate_files.py.", + f"# run from advancement fished/bit_{bit}_{value}\n", + f"advancement revoke @s only gm4_reeling_rods:fished/bit_{bit}_{value}\n", + "execute if entity @s[gamemode=adventure] run return fail\n", + "data modify storage gm4_reeling_rods:temp bit_data set value {bit_score:\"" + f"gm4_reeling_rods.id_bit.{bit}={value}\", bit:\"{bit}\"" + "}", + "data modify storage gm4_reeling_rods:temp bit_data.UUID set from entity @s UUID", + "function gm4_reeling_rods:player/received_bit with storage gm4_reeling_rods:temp bit_data" + ]) diff --git a/gm4_reeling_rods/pack.png b/gm4_reeling_rods/pack.png new file mode 100644 index 0000000000..162bb19072 Binary files /dev/null and b/gm4_reeling_rods/pack.png differ diff --git a/gm4_reeling_rods/pack.svg b/gm4_reeling_rods/pack.svg new file mode 100644 index 0000000000..1b652976c7 --- /dev/null +++ b/gm4_reeling_rods/pack.svg @@ -0,0 +1,126 @@ + + + + diff --git a/gm4_reeling_rods/translations.csv b/gm4_reeling_rods/translations.csv new file mode 100644 index 0000000000..fe1f8aa589 --- /dev/null +++ b/gm4_reeling_rods/translations.csv @@ -0,0 +1,8 @@ +key,en_us +gm4.reeling_rods.enchantment.reeling,"Reeling" +gm4.reeling_rods.enchantment.barbed,"Barbed" +text.gm4.reeling_rods.death.bleeding,"%s succumbed to their injuries" +text.gm4.reeling_rods.death.scratch,"%s was scratched to death by %s" +text.gm4.guidebook.reeling_rods.description,"All fishing rods have extra abilities when hooking Paintings, Item Frames, Leash Knots, Shulkers and End Crystals. Hooking any entity will also dismount them from their vehicle." +text.gm4.guidebook.reeling_rods.reeling,"Reeling is a fishing rod enchantment that revolves around stealing from entities. Pull the chest from chest boats and so much more!" +text.gm4.guidebook.reeling_rods.barbed,"Barbed turns a fishing rod into a lethal weapon. With 5 levels, it applies a scratching damage to the hooked mob and then bleeding damage."