修正了大量谬误,增加了《我的世界》相关服务功能等
This commit is contained in:
1 parent
17e3a11a73
commit
fd591a0c94
10451 files changed
+140600
-2938
No files matched your search
@@ -34,7 +34,8 @@ SQL_IP = _secret_get('database', 'host', fallback='127.0.0.1')
|
||||
|
||||
WHITE_HOSTS = [
|
||||
"www.gvsds.com", "gvsds.com", "api.gvsds.com", "127.0.0.1", "localhost", SQL_IP,
|
||||
"gvsds.dev", "yc8z.org", "ycbz.org", "gvsds.org", "gvsds.studio", "114.66.59.25"
|
||||
"gvsds.dev", "yc8z.org", "ycbz.org", "gvsds.org", "gvsds.studio", "114.66.59.25",
|
||||
"librok.gvsds.com"
|
||||
]
|
||||
BAN_IPS = [
|
||||
"www.kanglaohui.com", "www.best-loving.cn", "11.4.5.14", "185.223.152.189"
|
||||
@@ -43,6 +44,11 @@ BAN_IPS = [
|
||||
PIRACY_DIR = Path("TempLate") / "Errors" / "Piracy"
|
||||
PIRACY_LIST = os.listdir(PIRACY_DIR) if PIRACY_DIR.exists() else []
|
||||
|
||||
# 静态站点:host -> 站点根目录
|
||||
STATIC_SITES = {
|
||||
"librok.gvsds.com": Path("TempLate") / "rok" / "lib",
|
||||
}
|
||||
|
||||
LOG_CONFIG = {
|
||||
'disable_static_success': False,
|
||||
'disable_favicon': False,
|
||||
@@ -381,8 +387,71 @@ class SecurityMiddleware:
|
||||
start_response('403 Forbidden', [('Content-Type', 'text/plain')])
|
||||
return [b'Server does not support this type of page.']
|
||||
|
||||
# 静态站点路由:将指定 host 的请求直接映射到本地目录
|
||||
if host in STATIC_SITES:
|
||||
return self._serve_static_site(environ, start_response, host, path)
|
||||
|
||||
return self.app(environ, start_response)
|
||||
|
||||
def _serve_static_site(self, environ, start_response, host, path):
|
||||
"""为静态站点(host -> 目录)提供文件服务
|
||||
- 默认入口:目录请求 / 返回 index.html
|
||||
- 仅允许访问站点根目录内的文件(防止 ../ 越权)
|
||||
"""
|
||||
import mimetypes
|
||||
mimetypes.add_type('application/javascript', '.js')
|
||||
mimetypes.add_type('text/css', '.css')
|
||||
mimetypes.add_type('image/svg+xml', '.svg')
|
||||
|
||||
site_root = STATIC_SITES[host].resolve()
|
||||
# 清理路径:去掉前导 /,URL 反解码,过滤 ..
|
||||
rel_path = path.lstrip('/')
|
||||
if not rel_path:
|
||||
rel_path = 'index.html'
|
||||
try:
|
||||
from urllib.parse import unquote
|
||||
rel_path = unquote(rel_path)
|
||||
except Exception:
|
||||
pass
|
||||
# 防止目录越权
|
||||
if '..' in rel_path.split('/'):
|
||||
start_response('403 Forbidden', [('Content-Type', 'text/plain')])
|
||||
return [b'Forbidden']
|
||||
|
||||
target = (site_root / rel_path).resolve()
|
||||
try:
|
||||
target.relative_to(site_root)
|
||||
except ValueError:
|
||||
start_response('403 Forbidden', [('Content-Type', 'text/plain')])
|
||||
return [b'Forbidden']
|
||||
|
||||
# 目录则尝试 index.html
|
||||
if target.is_dir():
|
||||
target = target / 'index.html'
|
||||
if not target.is_file():
|
||||
start_response('404 Not Found', [('Content-Type', 'text/html')])
|
||||
try:
|
||||
content = open(Path("TempLate") / "Errors" / "404.html", encoding="utf-8").read().encode('utf-8')
|
||||
except Exception:
|
||||
content = b'404 Not Found'
|
||||
return [content]
|
||||
|
||||
try:
|
||||
data = target.read_bytes()
|
||||
except Exception as e:
|
||||
start_response('500 Internal Server Error', [('Content-Type', 'text/plain')])
|
||||
return [f'Read error: {e}'.encode('utf-8')]
|
||||
|
||||
ctype, _ = mimetypes.guess_type(str(target))
|
||||
if not ctype:
|
||||
ctype = 'application/octet-stream'
|
||||
start_response('200 OK', [
|
||||
('Content-Type', ctype),
|
||||
('Content-Length', str(len(data))),
|
||||
('Cache-Control', 'no-cache'),
|
||||
])
|
||||
return [data]
|
||||
|
||||
|
||||
def SetupLogging():
|
||||
global logger
|
||||
|
||||
+204
-115
@@ -1,115 +1,204 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<title>银河锋锐 - GC 分享钱包</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Arial', sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transition: background-color 0.5s, color 0.5s;
|
||||
padding: 20px; /* 避免内容贴边 */
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.wallet-container {
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
max-width: 500px;
|
||||
padding: 30px 20px; /* 减少垂直内边距,增加水平适配 */
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.logo {
|
||||
width: 100px; /* 缩小logo适应手机屏幕 */
|
||||
height: 100px;
|
||||
margin: 0 auto 20px; /* 居中显示 */
|
||||
display: block;
|
||||
}
|
||||
h1 {
|
||||
margin: 0 0 10px;
|
||||
font-size: 22px; /* 稍小字体更适合手机 */
|
||||
}
|
||||
.balance {
|
||||
font-size: 42px; /* 调整字号避免溢出 */
|
||||
font-weight: bold;
|
||||
margin: 15px 0;
|
||||
font-family: 'Courier New', monospace;
|
||||
line-height: 1.2; /* 优化行高 */
|
||||
}
|
||||
.currency {
|
||||
font-size: 18px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.address {
|
||||
font-family: 'Courier New', monospace;
|
||||
color: #666;
|
||||
word-break: break-all;
|
||||
margin: 15px 0;
|
||||
font-size: 13px;
|
||||
padding: 0 10px; /* 增加内边距避免内容贴边 */
|
||||
}
|
||||
/* 主题样式保持不变 */
|
||||
.default-theme {
|
||||
background-color: white;
|
||||
color: #333;
|
||||
}
|
||||
.green-theme {
|
||||
background-color: #e8f5e9;
|
||||
color: #2e7d32;
|
||||
}
|
||||
.blue-theme {
|
||||
background-color: #e3f2fd;
|
||||
color: #1565c0;
|
||||
}
|
||||
.gold-theme {
|
||||
background-color: #212121;
|
||||
color: #ffd700;
|
||||
}
|
||||
.corporate-theme {
|
||||
background-color: #1976d2;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="default-theme">
|
||||
<div class="wallet-container">
|
||||
<h1>银河锋锐 GC 钱包</h1>
|
||||
<p>您的游戏货币余额</p>
|
||||
<div class="balance">
|
||||
<span id="gc-amount">数据加载中...</span>
|
||||
<span class="currency">GC</span>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
let gcAmount = 0;
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const demoGC = urlParams.get('gc');
|
||||
if (demoGC) {
|
||||
gcAmount = parseInt(demoGC);
|
||||
}
|
||||
document.getElementById('gc-amount').textContent = gcAmount.toLocaleString();
|
||||
function setThemeByGC(amount) {
|
||||
const body = document.body;
|
||||
body.className = 'default-theme';
|
||||
if (amount === 0) {
|
||||
body.classList.add('default-theme');
|
||||
} else if (amount > 0 && amount <= 9999) {
|
||||
body.classList.add('green-theme');
|
||||
} else if (amount > 9999 && amount <= 999999) {
|
||||
body.classList.add('blue-theme');
|
||||
} else if (amount > 999999 && amount <= 9999999) {
|
||||
body.classList.add('gold-theme');
|
||||
} else if (amount > 9999999) {
|
||||
body.classList.add('corporate-theme');
|
||||
}
|
||||
}
|
||||
setThemeByGC(gcAmount);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<title>枢机信用储备银行 - 分享钱包</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transition: background-color 0.5s, color 0.5s;
|
||||
padding: 20px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.wallet-container {
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
max-width: 500px;
|
||||
padding: 30px 24px;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
h1 {
|
||||
margin: 0 0 8px;
|
||||
font-size: 22px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.subtitle {
|
||||
font-size: 13px;
|
||||
opacity: 0.7;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.balance-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 14px 16px;
|
||||
border-radius: 10px;
|
||||
background-color: rgba(255, 255, 255, 0.08);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.balance-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
text-align: left;
|
||||
}
|
||||
.balance-type {
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.balance-symbol {
|
||||
font-size: 12px;
|
||||
opacity: 0.6;
|
||||
}
|
||||
.balance-amount {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
font-family: 'Courier New', monospace;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.expire-info {
|
||||
margin-top: 18px;
|
||||
font-size: 12px;
|
||||
opacity: 0.6;
|
||||
}
|
||||
.error-box {
|
||||
padding: 16px;
|
||||
border-radius: 8px;
|
||||
background-color: rgba(239, 68, 68, 0.1);
|
||||
color: #dc2626;
|
||||
font-size: 14px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.empty-text {
|
||||
opacity: 0.6;
|
||||
padding: 20px;
|
||||
font-size: 14px;
|
||||
}
|
||||
/* 主题样式 */
|
||||
.default-theme { background-color: #f5f5f5; color: #333; }
|
||||
.default-theme .wallet-container { background-color: white; }
|
||||
.green-theme { background-color: #e8f5e9; color: #2e7d32; }
|
||||
.green-theme .wallet-container { background-color: #ffffff; }
|
||||
.blue-theme { background-color: #e3f2fd; color: #1565c0; }
|
||||
.blue-theme .wallet-container { background-color: #ffffff; }
|
||||
.gold-theme { background-color: #212121; color: #ffd700; }
|
||||
.gold-theme .wallet-container { background-color: #333333; }
|
||||
.corporate-theme { background-color: #0d47a1; color: white; }
|
||||
.corporate-theme .wallet-container { background-color: #1565c0; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="default-theme">
|
||||
<div class="wallet-container">
|
||||
<h1>枢机信用储备银行</h1>
|
||||
<div class="subtitle">分享钱包余额</div>
|
||||
<div id="balances-list">
|
||||
<div class="empty-text">数据加载中...</div>
|
||||
</div>
|
||||
<div id="expire-info" class="expire-info" style="display:none;"></div>
|
||||
</div>
|
||||
<script>
|
||||
// 格式化数字显示(保留三位小数,添加千分位)
|
||||
function FormatAmount(n) {
|
||||
if (n === null || n === undefined || isNaN(n)) return '0.000';
|
||||
return Number(n).toLocaleString(undefined, {
|
||||
minimumFractionDigits: 3,
|
||||
maximumFractionDigits: 3
|
||||
});
|
||||
}
|
||||
|
||||
// 根据 GC 数量设置主题
|
||||
function SetThemeByGC(amount) {
|
||||
const body = document.body;
|
||||
body.className = '';
|
||||
if (amount === 0) {
|
||||
body.classList.add('default-theme');
|
||||
} else if (amount > 0 && amount <= 9999) {
|
||||
body.classList.add('green-theme');
|
||||
} else if (amount > 9999 && amount <= 999999) {
|
||||
body.classList.add('blue-theme');
|
||||
} else if (amount > 999999 && amount <= 9999999) {
|
||||
body.classList.add('gold-theme');
|
||||
} else if (amount > 9999999) {
|
||||
body.classList.add('corporate-theme');
|
||||
} else {
|
||||
body.classList.add('default-theme');
|
||||
}
|
||||
}
|
||||
|
||||
// 解析 token 参数
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const token = urlParams.get('token');
|
||||
|
||||
const listEl = document.getElementById('balances-list');
|
||||
const expireEl = document.getElementById('expire-info');
|
||||
|
||||
if (!token) {
|
||||
listEl.innerHTML = '<div class="error-box">缺少分享码参数,请通过有效的二维码链接访问。</div>';
|
||||
} else {
|
||||
fetch(`/API/Wallet/SharedBalance?token=${encodeURIComponent(token)}`)
|
||||
.then(r => r.json())
|
||||
.then(data => {
|
||||
if (data.status !== 0) {
|
||||
listEl.innerHTML = `<div class="error-box">${data.msg || '查询失败'}</div>`;
|
||||
return;
|
||||
}
|
||||
const balances = data.Balances || [];
|
||||
if (!balances.length) {
|
||||
listEl.innerHTML = '<div class="empty-text">暂无资产</div>';
|
||||
} else {
|
||||
listEl.innerHTML = balances.map(b => `
|
||||
<div class="balance-card">
|
||||
<div class="balance-info">
|
||||
<div class="balance-type">${b.Type}</div>
|
||||
<div class="balance-symbol">${b.Symbol || ''}</div>
|
||||
</div>
|
||||
<div class="balance-amount">${FormatAmount(b.Balance)}</div>
|
||||
</div>
|
||||
`).join('');
|
||||
}
|
||||
|
||||
// 显示剩余有效期
|
||||
const ttl = data.ExpiresIn || 0;
|
||||
if (ttl > 0) {
|
||||
const h = Math.floor(ttl / 3600);
|
||||
const m = Math.floor((ttl % 3600) / 60);
|
||||
const s = ttl % 60;
|
||||
expireEl.textContent = `分享码剩余有效:${h}时${m}分${s}秒`;
|
||||
expireEl.style.display = 'block';
|
||||
// 倒计时
|
||||
let remain = ttl;
|
||||
const timer = setInterval(() => {
|
||||
remain = Math.max(0, remain - 1);
|
||||
if (remain <= 0) {
|
||||
clearInterval(timer);
|
||||
expireEl.textContent = '分享码已过期';
|
||||
listEl.innerHTML = '<div class="error-box">分享码已过期,请向钱包主人索取新的二维码。</div>';
|
||||
return;
|
||||
}
|
||||
const hh = Math.floor(remain / 3600);
|
||||
const mm = Math.floor((remain % 3600) / 60);
|
||||
const ss = remain % 60;
|
||||
expireEl.textContent = `分享码剩余有效:${hh}时${mm}分${ss}秒`;
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
// 根据主币种(GC)设置主题
|
||||
const gc = balances.find(x => x.Type === 'GC');
|
||||
SetThemeByGC(gc ? gc.Balance : 0);
|
||||
})
|
||||
.catch(err => {
|
||||
console.error('查询失败:', err);
|
||||
listEl.innerHTML = '<div class="error-box">网络错误,查询失败</div>';
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -457,7 +457,7 @@
|
||||
<span class="bg-netherite/10 text-netherite dark:bg-netherite/20 px-3 py-1 rounded-full text-sm font-medium">至尊级</span>
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<span class="text-3xl font-bold text-primary dark:text-secondary">10</span>%</span>
|
||||
<span class="text-3xl font-bold text-primary dark:text-secondary">10%</span>
|
||||
<span class="text-gray-500 dark:text-gray-500">/ 游戏年</span>
|
||||
</div>
|
||||
<ul class="space-y-3 mb-6">
|
||||
|
||||
+103
-52
@@ -1,68 +1,119 @@
|
||||
<div class="min-h-screen flex flex-col">
|
||||
<main class="flex-grow py-12 md:py-20 px-4 md:px-8 lg:px-16">
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<!-- 头部介绍 -->
|
||||
<div class="text-center mb-16">
|
||||
<h5 class="text-accent uppercase tracking-wider text-sm md:text-base mb-3">Get In Touch</h5>
|
||||
<h1 class="text-[clamp(2rem,5vw,3.5rem)] font-bold text-dark leading-tight text-balance">联系我们</h1>
|
||||
<div class="w-20 h-1 bg-primary mx-auto mt-6"></div>
|
||||
<p class="mt-6 text-accent max-w-2xl mx-auto text-balance">无论您有任何问题、建议或合作意向,我们的团队都将竭诚为您提供专业、高效的解决方案</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-12">
|
||||
<div class="space-y-8">
|
||||
<div class="bg-white rounded-xl p-8 shadow-elevated hover:shadow-hover transition-all-300">
|
||||
<div class="w-14 h-14 bg-primary/10 rounded-full flex items-center justify-center mb-6"><i class="fa fa-map-marker text-primary text-2xl"></i></div>
|
||||
<h3 class="text-xl font-semibold mb-3">公司地址</h3>
|
||||
<p class="text-accent">无物理地址</p>
|
||||
</div>
|
||||
<div class="bg-white rounded-xl p-8 shadow-elevated hover:shadow-hover transition-all-300">
|
||||
<div class="w-14 h-14 bg-primary/10 rounded-full flex items-center justify-center mb-6"><i class="fa fa-phone text-primary text-2xl"></i></div>
|
||||
<h3 class="text-xl font-semibold mb-3">联系电话</h3>
|
||||
<p class="text-accent mb-2">182-2215-2539</p>
|
||||
<p class="text-accent text-sm">周末 9:00 - 22:00</p>
|
||||
</div>
|
||||
<div class="bg-white rounded-xl p-8 shadow-elevated hover:shadow-hover transition-all-300">
|
||||
<div class="w-14 h-14 bg-primary/10 rounded-full flex items-center justify-center mb-6"><i class="fa fa-envelope text-primary text-2xl"></i></div>
|
||||
<h3 class="text-xl font-semibold mb-3">电子邮箱</h3>
|
||||
<p class="text-accent">support@gvsds.com</p>
|
||||
<p class="text-accent text-sm mt-2">48 小时内回复</p>
|
||||
|
||||
<!-- 联系方式卡片 -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-12">
|
||||
<div class="bg-white rounded-xl p-8 shadow-elevated hover:shadow-hover transition-all-300">
|
||||
<div class="w-14 h-14 bg-primary/10 rounded-full flex items-center justify-center mb-6">
|
||||
<i class="fa fa-map-marker text-primary text-2xl"></i>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">公司地址</h3>
|
||||
<p class="text-accent">无物理地址</p>
|
||||
</div>
|
||||
<div class="bg-white rounded-xl p-8 md:p-10 shadow-elevated">
|
||||
<h3 class="text-2xl font-semibold mb-8">发送消息</h3>
|
||||
<form class="space-y-6">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<div>
|
||||
<label for="name" class="block text-sm font-medium text-accent mb-2">姓名</label>
|
||||
<input type="text" id="name" class="w-full px-4 py-3 rounded-lg border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all-300" placeholder="请输入您的姓名">
|
||||
</div>
|
||||
<div>
|
||||
<label for="phone" class="block text-sm font-medium text-accent mb-2">电话</label>
|
||||
<input type="tel" id="phone" class="w-full px-4 py-3 rounded-lg border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all-300" placeholder="请输入您的联系电话">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="email" class="block text-sm font-medium text-accent mb-2">电子邮箱</label>
|
||||
<input type="email" id="email" class="w-full px-4 py-3 rounded-lg border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all-300" placeholder="请输入您的电子邮箱">
|
||||
</div>
|
||||
<div>
|
||||
<label for="subject" class="block text-sm font-medium text-accent mb-2">主题</label>
|
||||
<select id="subject" class="w-full px-4 py-3 rounded-lg border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all-300 bg-white">
|
||||
<option value="" disabled selected>请选择咨询主题</option>
|
||||
<option value="project">项目咨询</option>
|
||||
<option value="service">服务资讯</option>
|
||||
<option value="cooperation">相关合作</option>
|
||||
<option value="invite">加入申请</option>
|
||||
<option value="other">其他问题</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label for="message" class="block text-sm font-medium text-accent mb-2">留言内容</label>
|
||||
<textarea id="message" rows="5" class="w-full px-4 py-3 rounded-lg border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary/20 outline-none transition-all-300 resize-none"placeholder="请描述您的问题或建议..."></textarea>
|
||||
</div>
|
||||
<button type="submit" class="w-full bg-primary hover:bg-primary/90 text-white font-medium py-3 px-6 rounded-lg transition-all-300 flex items-center justify-center gap-2"><span>提交留言</span><i class="fa fa-paper-plane"></i></button>
|
||||
</form>
|
||||
<div class="bg-white rounded-xl p-8 shadow-elevated hover:shadow-hover transition-all-300">
|
||||
<div class="w-14 h-14 bg-primary/10 rounded-full flex items-center justify-center mb-6">
|
||||
<i class="fa fa-phone text-primary text-2xl"></i>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">联系电话</h3>
|
||||
<p class="text-accent mb-2">182-2215-2539</p>
|
||||
<p class="text-accent text-sm">周末 9:00 - 22:00</p>
|
||||
</div>
|
||||
<div class="bg-white rounded-xl p-8 shadow-elevated hover:shadow-hover transition-all-300">
|
||||
<div class="w-14 h-14 bg-primary/10 rounded-full flex items-center justify-center mb-6">
|
||||
<i class="fa fa-envelope text-primary text-2xl"></i>
|
||||
</div>
|
||||
<h3 class="text-xl font-semibold mb-3">电子邮箱</h3>
|
||||
<p class="text-accent">support@gvsds.com</p>
|
||||
<p class="text-accent text-sm mt-2">48 小时内回复</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 扫码咨询区域 -->
|
||||
<section class="bg-white p-8 md:p-12 rounded-xl shadow-elevated mb-20">
|
||||
<h2 class="text-2xl md:text-[1.8rem] font-semibold mb-3 pb-4 border-b border-gray-200 inline-block">咨询报价</h2>
|
||||
<p class="text-accent max-w-[800px] mb-4 leading-[1.8]">
|
||||
有定制开发需求?我们随时为您服务。无论您需要定制开发、开源项目二次开发,还是长期的运营维护,我们都能提供高性价比的解决方案。
|
||||
</p>
|
||||
<p class="text-accent max-w-[800px] mb-12 leading-[1.8]">
|
||||
注意:添加企业微信或微信,请备注"咨询报价"明确来意。
|
||||
</p>
|
||||
|
||||
<div class="flex justify-center gap-8 md:gap-16 flex-wrap">
|
||||
<!-- 企业微信 -->
|
||||
<div class="w-[260px] p-8 bg-gray-50 rounded-xl text-center transition-all duration-300 ease-[cubic-bezier(0.25,0.8,0.25,1)] hover:-translate-y-1.5 hover:shadow-[0_10px_15px_-3px_rgba(0,0,0,0.08),0_4px_6px_-2px_rgba(0,0,0,0.04)] hover:bg-white">
|
||||
<h3 class="text-base font-medium mb-6 tracking-[0.3px]">企业微信</h3>
|
||||
<div class="w-[180px] h-[180px] mx-auto mb-6 border border-gray-200 p-3 bg-white rounded-lg flex items-center justify-center">
|
||||
<img src="/Project/Service/ContactInfo/wecom.jpg" alt="企业微信二维码" class="w-full h-full object-contain">
|
||||
</div>
|
||||
<p class="text-sm text-accent leading-[1.6]">扫码添加企业微信,一对一沟通报价</p>
|
||||
</div>
|
||||
|
||||
<!-- 微信 -->
|
||||
<div class="w-[260px] p-8 bg-gray-50 rounded-xl text-center transition-all duration-300 ease-[cubic-bezier(0.25,0.8,0.25,1)] hover:-translate-y-1.5 hover:shadow-[0_10px_15px_-3px_rgba(0,0,0,0.08),0_4px_6px_-2px_rgba(0,0,0,0.04)] hover:bg-white">
|
||||
<h3 class="text-base font-medium mb-6 tracking-[0.3px]">微信</h3>
|
||||
<div class="w-[180px] h-[180px] mx-auto mb-6 border border-gray-200 p-3 bg-white rounded-lg flex items-center justify-center">
|
||||
<img src="/Project/Service/ContactInfo/wx.jpg" alt="微信二维码" class="w-full h-full object-contain">
|
||||
</div>
|
||||
<p class="text-sm text-accent leading-[1.6]">微信:GVSADS,备注咨询报价</p>
|
||||
</div>
|
||||
|
||||
<!-- QQ -->
|
||||
<div class="w-[260px] p-8 bg-gray-50 rounded-xl text-center transition-all duration-300 ease-[cubic-bezier(0.25,0.8,0.25,1)] hover:-translate-y-1.5 hover:shadow-[0_10px_15px_-3px_rgba(0,0,0,0.08),0_4px_6px_-2px_rgba(0,0,0,0.04)] hover:bg-white">
|
||||
<h3 class="text-base font-medium mb-6 tracking-[0.3px]">QQ</h3>
|
||||
<div class="w-[180px] h-[180px] mx-auto mb-6 border border-gray-200 p-3 bg-white rounded-lg flex items-center justify-center">
|
||||
<img src="/Project/Service/ContactInfo/qq.png" alt="QQ二维码" class="w-full h-full object-contain">
|
||||
</div>
|
||||
<p class="text-sm text-accent leading-[1.6]">扫码添加QQ,获取详细报价方案</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 服务流程 -->
|
||||
<section class="mb-12">
|
||||
<h2 class="text-2xl md:text-[1.8rem] font-semibold text-center mb-16">标准化交付流程</h2>
|
||||
<div class="flex justify-between relative px-4 md:px-8 flex-wrap">
|
||||
<!-- 流程连接线 -->
|
||||
<div class="absolute top-5 left-[8%] right-[8%] h-0.5 bg-gray-200 hidden md:block"></div>
|
||||
|
||||
<div class="flex-1 min-w-[150px] text-center relative px-3 mb-8">
|
||||
<div class="w-10 h-10 bg-slate-800 text-white rounded-full flex items-center justify-center mx-auto mb-6 text-sm">1</div>
|
||||
<h4 class="text-[0.95rem] font-medium mb-3">需求沟通与评估</h4>
|
||||
<p class="text-sm text-accent leading-[1.7]">深入沟通企业需求,评估技术方案与开发成本,提供详细报价与排期。</p>
|
||||
</div>
|
||||
|
||||
<div class="flex-1 min-w-[150px] text-center relative px-3 mb-8">
|
||||
<div class="w-10 h-10 bg-slate-800 text-white rounded-full flex items-center justify-center mx-auto mb-6 text-sm">2</div>
|
||||
<h4 class="text-[0.95rem] font-medium mb-3">方案设计与确认</h4>
|
||||
<p class="text-sm text-accent leading-[1.7]">输出技术方案、原型设计、功能清单,确认后签订合同启动开发。</p>
|
||||
</div>
|
||||
|
||||
<div class="flex-1 min-w-[150px] text-center relative px-3 mb-8">
|
||||
<div class="w-10 h-10 bg-slate-800 text-white rounded-full flex items-center justify-center mx-auto mb-6 text-sm">3</div>
|
||||
<h4 class="text-[0.95rem] font-medium mb-3">开发与阶段性交付</h4>
|
||||
<p class="text-sm text-accent leading-[1.7]">分阶段开发与交付,定期同步进度,支持中途需求微调。</p>
|
||||
</div>
|
||||
|
||||
<div class="flex-1 min-w-[150px] text-center relative px-3 mb-8">
|
||||
<div class="w-10 h-10 bg-slate-800 text-white rounded-full flex items-center justify-center mx-auto mb-6 text-sm">4</div>
|
||||
<h4 class="text-[0.95rem] font-medium mb-3">测试与上线部署</h4>
|
||||
<p class="text-sm text-accent leading-[1.7]">全面功能测试、性能测试,完成后部署上线,提供操作培训。</p>
|
||||
</div>
|
||||
|
||||
<div class="flex-1 min-w-[150px] text-center relative px-3 mb-8">
|
||||
<div class="w-10 h-10 bg-slate-800 text-white rounded-full flex items-center justify-center mx-auto mb-6 text-sm">5</div>
|
||||
<h4 class="text-[0.95rem] font-medium mb-3">售后维护与迭代</h4>
|
||||
<p class="text-sm text-accent leading-[1.7]">提供 7×24h 售后支持,定期系统维护,按需进行功能迭代。</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
Binary file not shown.
@@ -1142,7 +1142,7 @@ body.GERPSidebarOpen .GERPSidebar {
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
padding: 16px 20px;
|
||||
background-color: rgba(37, 99, 235, 0.05);
|
||||
background-color: var(--PrimaryAlpha10);
|
||||
}
|
||||
|
||||
.GERPUserDropdownHeader > div:last-child {
|
||||
@@ -1194,13 +1194,18 @@ body.GERPSidebarOpen .GERPSidebar {
|
||||
}
|
||||
|
||||
.GERPUserDropdownItem:hover {
|
||||
background-color: var(--BackgroundColor);
|
||||
background-color: var(--HoverBackground);
|
||||
}
|
||||
|
||||
.GERPUserDropdownItem.Danger {
|
||||
color: var(--DangerColor);
|
||||
}
|
||||
|
||||
/* Danger 项的图标也使用红色(覆盖通用 i 规则的 TextSecondary) */
|
||||
.GERPUserDropdownItem.Danger i {
|
||||
color: var(--DangerColor);
|
||||
}
|
||||
|
||||
.GERPUserDropdownItem i {
|
||||
width: 20px;
|
||||
text-align: center;
|
||||
|
||||
@@ -47,6 +47,14 @@ window.GERPThemeSync = {
|
||||
if (themeColors) {
|
||||
try {
|
||||
const colors = JSON.parse(themeColors);
|
||||
// 向后兼容:旧主题数据可能缺少 HoverBackground,根据 BackgroundColor 亮度推断并回填
|
||||
// 深色背景用白色 8% 透明(hover 变浅),浅色背景用黑色 4% 透明
|
||||
if (!colors.HoverBackground && colors.BackgroundColor) {
|
||||
colors.HoverBackground = this.IsColorDark(colors.BackgroundColor)
|
||||
? 'rgba(255, 255, 255, 0.08)'
|
||||
: 'rgba(0, 0, 0, 0.04)';
|
||||
localStorage.setItem('gerp-theme-colors', JSON.stringify(colors));
|
||||
}
|
||||
Object.entries(colors).forEach(([key, value]) => {
|
||||
root.style.setProperty(`--${key}`, value);
|
||||
});
|
||||
@@ -54,5 +62,17 @@ window.GERPThemeSync = {
|
||||
console.warn('无法解析主题颜色:', e);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 辅助:判断颜色亮度(YIQ 公式),<128 视为深色
|
||||
IsColorDark(Hex) {
|
||||
if (!Hex || typeof Hex !== 'string') return false;
|
||||
const M = Hex.replace('#', '').trim();
|
||||
if (M.length !== 6) return false;
|
||||
const R = parseInt(M.substr(0, 2), 16);
|
||||
const G = parseInt(M.substr(2, 2), 16);
|
||||
const B = parseInt(M.substr(4, 2), 16);
|
||||
if (isNaN(R) || isNaN(G) || isNaN(B)) return false;
|
||||
return (R * 299 + G * 587 + B * 114) / 1000 < 128;
|
||||
}
|
||||
};
|
||||
};
|
||||
@@ -1486,14 +1486,13 @@ class GERPUI {
|
||||
data-id="${tab.Id}"
|
||||
draggable="true"
|
||||
title="${tab.Title}">
|
||||
<i class="fas ${tab.Icon}"></i>
|
||||
${this.WrapIcon(tab.Icon)}
|
||||
<span class="GERPTabText">${tab.Title}</span>
|
||||
<span class="GERPTabClose" data-tab="${tab.Id}">
|
||||
<i class="fas fa-times"></i>
|
||||
</span>
|
||||
</div>
|
||||
`).join('');
|
||||
|
||||
container.innerHTML = html;
|
||||
}
|
||||
this.BindPanelTabEvents(panel);
|
||||
@@ -2089,7 +2088,7 @@ class GERPUI {
|
||||
html += `
|
||||
<li class="GERPMenuItem ${isActive ? 'Active' : ''} ${hasChildren ? 'HasChildren' : ''}" data-id="${item.Id}">
|
||||
<div class="GERPMenuLink" style="padding-left: ${paddingLeft}px" data-page="${item.Page || ''}" draggable="true">
|
||||
<span class="GERPMenuIcon">${item.Icon || '<i class="fas fa-file"></i>'}</span>
|
||||
<span class="GERPMenuIcon">${this.WrapIcon(item.Icon || 'fa-file')}</span>
|
||||
<span class="GERPMenuText">${item.Title}</span>
|
||||
${hasChildren ? `<span class="GERPMenuArrow ${isExpanded ? 'Expanded' : ''}"><i class="fas fa-chevron-right"></i></span>` : ''}
|
||||
</div>
|
||||
@@ -3006,10 +3005,26 @@ class GERPUI {
|
||||
this.LoadPanelFrame('main', url);
|
||||
}
|
||||
|
||||
ExtractIconClass(iconHtml) {
|
||||
if (!iconHtml) return 'fa-file';
|
||||
const match = iconHtml.match(/fa-[a-z-]+/);
|
||||
return match ? match[0] : 'fa-file';
|
||||
ExtractIconClass(iconStr) {
|
||||
// 兼容两种输入:
|
||||
// 1. 完整 HTML 片段(旧数据):<i class="fas fa-wallet"></i> → "fas fa-wallet"
|
||||
// 2. 纯 class 字符串(新机制):fas fa-wallet 或 fa-wallet → 原样返回
|
||||
if (!iconStr) return 'fa-file';
|
||||
const str = String(iconStr).trim();
|
||||
if (str.startsWith('<')) {
|
||||
// 含 HTML 标签,提取 class 属性
|
||||
const m = str.match(/class\s*=\s*["']([^"']+)["']/);
|
||||
return m ? m[1].trim() : 'fa-file';
|
||||
}
|
||||
// 纯 class 直接返回
|
||||
return str;
|
||||
}
|
||||
|
||||
WrapIcon(iconStr) {
|
||||
// 统一包裹 <i> 标签:输入 HTML 片段或纯 class,输出 <i class="..."></i>
|
||||
// 已含 <i> 标签的旧数据原样返回(兼容)
|
||||
const cls = this.ExtractIconClass(iconStr);
|
||||
return `<i class="${cls}"></i>`;
|
||||
}
|
||||
|
||||
// ==================== Toast 提示层组件 ====================
|
||||
|
||||
+1374
-1253
File diff suppressed because it is too large.
Load diff
@@ -7,7 +7,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-building icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">公司详情</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
<button class="GERPBtn Primary" onclick="handleEdit()" style="margin-left:auto;"><i class="fas fa-edit"></i> 编辑</button>
|
||||
</div>
|
||||
@@ -46,16 +46,6 @@
|
||||
return qs ? `${path}?${qs}` : path;
|
||||
}
|
||||
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch(buildApiUrl('/API/FormAPI/CheckAdmin'), { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async function init() {
|
||||
const containerEl = document.getElementById('detailContainer');
|
||||
|
||||
@@ -65,9 +55,8 @@
|
||||
}
|
||||
|
||||
// 先检查管理员特权,决定是否关闭公司隔离(仅当 URL 带 admin_verify=1 时启用)
|
||||
_isAdminMode = CompanyUtils.hasAdminVerifyArg() ? await checkAdmin() : false;
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = _isAdminMode ? '' : 'none';
|
||||
const _adminData = CompanyUtils.hasAdminVerifyArg() ? await GERP.CheckAdmin() : null;
|
||||
_isAdminMode = GERP.ApplyAdminBadge(_adminData);
|
||||
|
||||
try {
|
||||
const dataResp = await fetch(buildApiUrl('/API/FormAPI/Get/Company', { CompanyUUID: companyUUID, PageSize: '1' }), { credentials: 'include' });
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-building icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">公司管理</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="cp-container" id="TableContainer"></div>
|
||||
|
||||
@@ -0,0 +1,262 @@
|
||||
<script src="/assets/gerp/CompanyCommon.js?v=20260627c"></script>
|
||||
|
||||
<style>
|
||||
.PermPage { padding: 20px; height: 100%; display: flex; flex-direction: column; box-sizing: border-box; gap: 16px; }
|
||||
.PermHeader { display: flex; align-items: center; gap: 12px; flex-shrink: 0; }
|
||||
.PermHeader h1 { margin: 0; flex: 1; }
|
||||
.PermToolbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; padding: 10px 12px; background: var(--CardBackground, #fff); border: 1px solid var(--BorderColor, #e2e8f0); border-radius: 8px; flex-shrink: 0; }
|
||||
.PermToolbar label { font-size: 13px; color: var(--TextSecondary, #64748b); margin-right: 4px; font-weight: 600; }
|
||||
.PermToolbar select { padding: 6px 10px; border: 1px solid var(--BorderColor, #e2e8f0); border-radius: 6px; font-size: 13px; min-width: 200px; background: var(--CardBackground, #fff); color: var(--TextPrimary, #1e293b); }
|
||||
.PermToolbar .Stat { margin-left: auto; font-size: 13px; color: var(--TextSecondary, #64748b); }
|
||||
.PermToolbar .Stat strong { color: var(--PrimaryColor, #2563eb); }
|
||||
.PermSection { background: var(--CardBackground, #fff); border: 1px solid var(--BorderColor, #e2e8f0); border-radius: 8px; padding: 12px; display: flex; flex-direction: column; min-height: 0; }
|
||||
.PermSection h3 { font-size: 14px; font-weight: 600; margin: 0 0 10px 0; padding-bottom: 8px; border-bottom: 1px solid var(--BorderColor, #e2e8f0); display: flex; align-items: center; gap: 8px; }
|
||||
.PermSection h3 i { color: var(--PrimaryColor, #2563eb); }
|
||||
.PermSection h3 .Hint { font-size: 12px; color: var(--TextSecondary, #64748b); font-weight: normal; margin-left: 8px; }
|
||||
.PermSplit { flex: 1; min-height: 0; display: grid; grid-template-rows: 1fr 1fr; gap: 16px; overflow: hidden; }
|
||||
.PermTableWrap { flex: 1; min-height: 0; overflow: hidden; }
|
||||
#DeniedState { text-align: center; padding: 60px 20px; color: var(--TextSecondary, #64748b); }
|
||||
#DeniedState i { font-size: 48px; margin-bottom: 12px; display: block; color: var(--DangerColor, #ef4444); }
|
||||
#DeniedState .Title { font-size: 16px; font-weight: 600; color: var(--TextPrimary, #1e293b); margin-bottom: 6px; }
|
||||
</style>
|
||||
|
||||
<div class="GERPPage">
|
||||
<div class="PermPage">
|
||||
<div class="PermHeader">
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-key icon-primary icon-left-lg"></i>
|
||||
<span>权限管理</span>
|
||||
</h1>
|
||||
<span id="AdminBadge" style="display:none;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;">
|
||||
<i class="fas fa-shield-alt"></i> <span id="AdminBadgeText">特权模式</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="PermToolbar">
|
||||
<label>角色:</label>
|
||||
<select id="RoleFilter" onchange="OnFilterChange()"></select>
|
||||
<label>公司:</label>
|
||||
<select id="CompanyFilter" onchange="OnFilterChange()"></select>
|
||||
<div class="Stat" id="PermStat">权限 <strong>0</strong> 项,角色权限关联 <strong>0</strong> 条</div>
|
||||
</div>
|
||||
|
||||
<div class="PermSplit" id="MainSplit">
|
||||
<!-- 全局权限定义表 -->
|
||||
<div class="PermSection">
|
||||
<h3>
|
||||
<i class="fas fa-list-check"></i> 全局权限定义
|
||||
<span class="Hint">权限码命名规范:模块:操作(如 User:create),分类用于分组显示</span>
|
||||
</h3>
|
||||
<div class="PermTableWrap" id="PermissionTableContainer" style="height:100%;"></div>
|
||||
</div>
|
||||
|
||||
<!-- 角色权限多对多关联表 -->
|
||||
<div class="PermSection">
|
||||
<h3>
|
||||
<i class="fas fa-link"></i> 角色权限关联
|
||||
<span class="Hint">多对多表:选择角色+公司后筛选,添加时通过权限/角色实体搜索</span>
|
||||
</h3>
|
||||
<div class="PermTableWrap" id="RolePermTableContainer" style="height:100%;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="DeniedState" style="display:none;">
|
||||
<i class="fas fa-lock"></i>
|
||||
<div class="Title">无权访问</div>
|
||||
<div>该页面仅管理员可查看,请切换至管理员角色或联系管理员。</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const CurrentServer = CompanyUtils.getServer();
|
||||
const UrlParams = new URLSearchParams(window.location.search);
|
||||
const InitRoleUUID = UrlParams.get('RoleUUID') || '';
|
||||
const InitCompanyUUID = UrlParams.get('CompanyUUID') || '';
|
||||
|
||||
let PermissionTable = null;
|
||||
let RolePermTable = null;
|
||||
let RoleList = [];
|
||||
let CompanyList = [];
|
||||
let IsAdminMode = false;
|
||||
|
||||
CompanyUtils.setPageTitle('权限管理');
|
||||
|
||||
/** 构造带 server / admin_verify 的 FormAPI URL */
|
||||
function BuildApiUrl(Path, Params = {}) {
|
||||
const All = {};
|
||||
if (CurrentServer !== 'gvsds-master') All.server = CurrentServer;
|
||||
if (IsAdminMode) All.admin_verify = '1';
|
||||
Object.assign(All, Params);
|
||||
const Qs = new URLSearchParams(All).toString();
|
||||
return Qs ? `${Path}?${Qs}` : Path;
|
||||
}
|
||||
|
||||
/** 入口校验:仅管理员可访问权限管理页 */
|
||||
async function VerifyAccess() {
|
||||
try {
|
||||
const AdminData = await GERP.CheckAdmin();
|
||||
const IsAdmin = GERP.ApplyAdminBadge(AdminData);
|
||||
if (!IsAdmin) {
|
||||
document.getElementById('MainSplit').style.display = 'none';
|
||||
document.querySelector('.PermToolbar').style.display = 'none';
|
||||
document.getElementById('DeniedState').style.display = 'block';
|
||||
return false;
|
||||
}
|
||||
IsAdminMode = true;
|
||||
const Badge = document.getElementById('AdminBadge');
|
||||
Badge.style.display = 'inline-block';
|
||||
return true;
|
||||
} catch (_) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/** 加载角色列表(用于筛选下拉) */
|
||||
async function LoadRoles() {
|
||||
try {
|
||||
const Resp = await fetch(BuildApiUrl('/API/FormAPI/Get/Role', { PageSize: '500' }), { credentials: 'include' });
|
||||
const Result = await Resp.json();
|
||||
if (Result.code === 0) {
|
||||
RoleList = Result.data || [];
|
||||
}
|
||||
} catch (_) { RoleList = []; }
|
||||
}
|
||||
|
||||
/** 加载公司列表(用于筛选下拉) */
|
||||
async function LoadCompanies() {
|
||||
try {
|
||||
const Resp = await fetch(BuildApiUrl('/API/FormAPI/CompanySearch', { keyword: '', limit: '500' }), { credentials: 'include' });
|
||||
const Result = await Resp.json();
|
||||
if (Result.code === 0) {
|
||||
CompanyList = Result.data || [];
|
||||
}
|
||||
} catch (_) { CompanyList = []; }
|
||||
}
|
||||
|
||||
/** 初始化筛选下拉 */
|
||||
function InitFilters() {
|
||||
const RoleSel = document.getElementById('RoleFilter');
|
||||
const CompSel = document.getElementById('CompanyFilter');
|
||||
|
||||
RoleSel.innerHTML = '<option value="">全部角色</option>' + RoleList.map(r =>
|
||||
`<option value="${r.RoleUUID}"${r.RoleUUID === InitRoleUUID ? ' selected' : ''}>${CompanyUtils.esc(r.RoleName || '')}</option>`
|
||||
).join('');
|
||||
|
||||
CompSel.innerHTML = '<option value="">全部公司</option>' + CompanyList.map(c =>
|
||||
`<option value="${c.CompanyUUID}"${c.CompanyUUID === InitCompanyUUID ? ' selected' : ''}>${CompanyUtils.esc(c.CompanyName || '')}</option>`
|
||||
).join('');
|
||||
}
|
||||
|
||||
/** 初始化 Permission 全局表(管理员可 CRUD) */
|
||||
function InitPermissionTable() {
|
||||
PermissionTable = new TableEngine({
|
||||
container: '#PermissionTableContainer',
|
||||
height: '100%',
|
||||
tableName: 'Permission',
|
||||
columns: [
|
||||
{ field: 'PermUUID', title: '权限UUID', primaryKey: true, editable: false, hideInForm: true, width: 140 },
|
||||
{ field: 'PermName', title: '权限名称', type: 'text', width: 180, required: true },
|
||||
{ field: 'PermCode', title: '权限码', type: 'text', width: 200, required: true },
|
||||
{ field: 'PermCategory', title: '分类', type: 'text', width: 120 },
|
||||
{ field: 'PermStatus', title: '状态', type: 'select', width: 80, options: [{ value: 0, label: '禁用' }, { value: 1, label: '启用' }] },
|
||||
{ field: 'PermDesc', title: '描述', type: 'text', width: 260 },
|
||||
{ field: 'CreateTime', title: '创建时间', type: 'datetime', editable: false, width: 160 },
|
||||
],
|
||||
data: [],
|
||||
pageSize: 20,
|
||||
columnDistribution: 'equal',
|
||||
showPagination: true,
|
||||
showCheckbox: true,
|
||||
editable: true,
|
||||
sortable: true,
|
||||
filterable: true,
|
||||
striped: true,
|
||||
hoverable: true,
|
||||
bordered: true,
|
||||
api: {
|
||||
get: BuildApiUrl('/API/FormAPI/Get/Permission'),
|
||||
add: BuildApiUrl('/API/FormAPI/Add/Permission'),
|
||||
edit: BuildApiUrl('/API/FormAPI/Modify/Permission/<id>'),
|
||||
modify: BuildApiUrl('/API/FormAPI/ModifyItem/Permission/<id>'),
|
||||
delete: BuildApiUrl('/API/FormAPI/Delete/Permission/<id>'),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/** 初始化 RolePermission 多对多关联表(带实体搜索) */
|
||||
function InitRolePermTable() {
|
||||
RolePermTable = new TableEngine({
|
||||
container: '#RolePermTableContainer',
|
||||
height: '100%',
|
||||
tableName: 'RolePermission',
|
||||
columns: [
|
||||
{ field: 'RolePermUUID', title: '关联UUID', primaryKey: true, editable: false, hideInForm: true, width: 140 },
|
||||
CompanyUtils.epColumn('RoleUUID', '角色', 'Role', { width: 200, required: true }),
|
||||
CompanyUtils.epColumn('PermUUID', '权限', 'Permission', { width: 220, required: true }),
|
||||
CompanyUtils.epColumn('CompanyUUID', '公司', 'Company', { width: 200, required: true }),
|
||||
{ field: 'CreateTime', title: '创建时间', type: 'datetime', editable: false, width: 160 },
|
||||
],
|
||||
data: [],
|
||||
pageSize: 20,
|
||||
columnDistribution: 'equal',
|
||||
showPagination: true,
|
||||
showCheckbox: true,
|
||||
editable: true,
|
||||
sortable: true,
|
||||
filterable: true,
|
||||
striped: true,
|
||||
hoverable: true,
|
||||
bordered: true,
|
||||
api: {
|
||||
get: BuildApiUrl('/API/FormAPI/Get/RolePermission'),
|
||||
add: BuildApiUrl('/API/FormAPI/Add/RolePermission'),
|
||||
edit: BuildApiUrl('/API/FormAPI/Modify/RolePermission/<id>'),
|
||||
modify: BuildApiUrl('/API/FormAPI/ModifyItem/RolePermission/<id>'),
|
||||
delete: BuildApiUrl('/API/FormAPI/Delete/RolePermission/<id>'),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/** 筛选变化时,按角色/公司重新加载 RolePermission */
|
||||
function OnFilterChange() {
|
||||
const RoleUUID = document.getElementById('RoleFilter').value;
|
||||
const CompanyUUID = document.getElementById('CompanyFilter').value;
|
||||
// TableEngine 通过 api.get 拉取数据,附加 query 参数需要重新设置 URL
|
||||
// 这里通过重新构建 get URL 触发刷新
|
||||
const Params = {};
|
||||
if (RoleUUID) Params.RoleUUID = RoleUUID;
|
||||
if (CompanyUUID) Params.CompanyUUID = CompanyUUID;
|
||||
if (RolePermTable) {
|
||||
RolePermTable.Config.api.get = BuildApiUrl('/API/FormAPI/Get/RolePermission', Params);
|
||||
RolePermTable.Reload();
|
||||
}
|
||||
UpdateStat();
|
||||
}
|
||||
|
||||
/** 更新统计信息 */
|
||||
async function UpdateStat() {
|
||||
try {
|
||||
const [PermResp, RolePermResp] = await Promise.all([
|
||||
fetch(BuildApiUrl('/API/FormAPI/Get/Permission', { PageSize: '1' }), { credentials: 'include' }).then(r => r.json()),
|
||||
fetch(BuildApiUrl('/API/FormAPI/Get/RolePermission', { PageSize: '1' }), { credentials: 'include' }).then(r => r.json()),
|
||||
]);
|
||||
const PermCount = PermResp.code === 0 ? (PermResp.total || (PermResp.data || []).length || 0) : 0;
|
||||
const RolePermCount = RolePermResp.code === 0 ? (RolePermResp.total || (RolePermResp.data || []).length || 0) : 0;
|
||||
document.getElementById('PermStat').innerHTML = `权限 <strong>${PermCount}</strong> 项,角色权限关联 <strong>${RolePermCount}</strong> 条`;
|
||||
} catch (_) { /* 静默 */ }
|
||||
}
|
||||
|
||||
/** 入口 */
|
||||
async function Init() {
|
||||
const Ok = await VerifyAccess();
|
||||
if (!Ok) return;
|
||||
await Promise.all([LoadRoles(), LoadCompanies()]);
|
||||
InitFilters();
|
||||
InitPermissionTable();
|
||||
InitRolePermTable();
|
||||
OnFilterChange();
|
||||
}
|
||||
|
||||
Init();
|
||||
</script>
|
||||
@@ -7,7 +7,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-shield-alt icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">角色详情</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
<button class="GERPBtn Primary" onclick="handleEdit()" style="margin-left:auto;"><i class="fas fa-edit"></i> 编辑</button>
|
||||
</div>
|
||||
@@ -47,16 +47,6 @@
|
||||
return qs ? `${path}?${qs}` : path;
|
||||
}
|
||||
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch(buildApiUrl('/API/FormAPI/CheckAdmin'), { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function roleTypeText(t) {
|
||||
const map = { 0: '组员', 1: '组长', 2: '其他' };
|
||||
return map[t] ?? '-';
|
||||
@@ -71,9 +61,8 @@
|
||||
}
|
||||
|
||||
// 先检查管理员特权,决定是否关闭公司隔离(仅当 URL 带 admin_verify=1 时启用)
|
||||
_isAdminMode = CompanyUtils.hasAdminVerifyArg() ? await checkAdmin() : false;
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = _isAdminMode ? '' : 'none';
|
||||
const _adminData = CompanyUtils.hasAdminVerifyArg() ? await GERP.CheckAdmin() : null;
|
||||
_isAdminMode = GERP.ApplyAdminBadge(_adminData);
|
||||
|
||||
try {
|
||||
const dataResp = await fetch(buildApiUrl('/API/FormAPI/Get/Role', { RoleUUID: roleUUID, PageSize: '1' }), { credentials: 'include' });
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-shield-alt icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">角色管理</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="cp-container" id="TableContainer"></div>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-layer-group icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">租户详情</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
<button class="GERPBtn Primary" onclick="handleEdit()" style="margin-left:auto;"><i class="fas fa-edit"></i> 编辑</button>
|
||||
</div>
|
||||
@@ -46,16 +46,6 @@
|
||||
return qs ? `${path}?${qs}` : path;
|
||||
}
|
||||
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch(buildApiUrl('/API/FormAPI/CheckAdmin'), { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function tenantStatusTag(status) {
|
||||
if (status === 1) return '<span style="display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;background:#dcfce7;color:#166534;">启用</span>';
|
||||
return '<span style="display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;background:#fee2e2;color:#991b1b;">禁用</span>';
|
||||
@@ -81,9 +71,8 @@
|
||||
}
|
||||
|
||||
// 先检查管理员特权(仅当 URL 带 admin_verify=1 时启用)
|
||||
_isAdminMode = CompanyUtils.hasAdminVerifyArg() ? await checkAdmin() : false;
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = _isAdminMode ? '' : 'none';
|
||||
const _adminData = CompanyUtils.hasAdminVerifyArg() ? await GERP.CheckAdmin() : null;
|
||||
_isAdminMode = GERP.ApplyAdminBadge(_adminData);
|
||||
|
||||
try {
|
||||
const dataResp = await fetch(buildApiUrl('/API/FormAPI/Get/Tenant', { TenantUUID: tenantUUID, PageSize: '1' }), { credentials: 'include' });
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-layer-group icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">租户管理</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="cp-container" id="TableContainer"></div>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-box icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">产品管理</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
</div>
|
||||
<div id="scopeBanner" class="product-scope-banner normal" style="display:none;"></div>
|
||||
@@ -32,19 +32,6 @@
|
||||
let isAdminMode = false;
|
||||
let _roleScope = null;
|
||||
|
||||
/** 检查当前用户是否具有管理员特权,并填充 _roleScope */
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
if (result.code === 0 && result.data) {
|
||||
_roleScope = result.data.role_scope || null;
|
||||
return result.data.is_admin;
|
||||
}
|
||||
return false;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
function buildApiUrl(path, params = {}) {
|
||||
const allParams = {};
|
||||
if (currentServer !== 'gvsds-master') allParams.server = currentServer;
|
||||
@@ -93,13 +80,10 @@
|
||||
async function initTable() {
|
||||
const containerEl = document.getElementById('TableContainer');
|
||||
|
||||
const isAdmin = await checkAdmin();
|
||||
const _adminData = await GERP.CheckAdmin();
|
||||
_roleScope = _adminData ? (_adminData.role_scope || null) : null;
|
||||
applyScopeUI();
|
||||
if (isAdmin) {
|
||||
isAdminMode = true;
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = 'inline-block';
|
||||
}
|
||||
isAdminMode = GERP.ApplyAdminBadge(_adminData);
|
||||
|
||||
try {
|
||||
let columns;
|
||||
@@ -122,8 +106,8 @@
|
||||
data: [],
|
||||
pageSize: 20,
|
||||
showPagination: true,
|
||||
showCheckbox: isAdmin,
|
||||
editable: isAdmin,
|
||||
showCheckbox: isAdminMode,
|
||||
editable: isAdminMode,
|
||||
sortable: true,
|
||||
filterable: true,
|
||||
striped: true,
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-shopping-cart icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">销售订单</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
</div>
|
||||
<div id="scopeBanner" class="order-scope-banner normal" style="display:none;"></div>
|
||||
@@ -32,19 +32,6 @@
|
||||
let isAdminMode = false;
|
||||
let _roleScope = null;
|
||||
|
||||
/** 检查当前用户是否具有管理员特权,并填充 _roleScope */
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
if (result.code === 0 && result.data) {
|
||||
_roleScope = result.data.role_scope || null;
|
||||
return result.data.is_admin;
|
||||
}
|
||||
return false;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
function buildApiUrl(path, params = {}) {
|
||||
const allParams = {};
|
||||
if (currentServer !== 'gvsds-master') allParams.server = currentServer;
|
||||
@@ -96,13 +83,10 @@
|
||||
async function initTable() {
|
||||
const containerEl = document.getElementById('TableContainer');
|
||||
|
||||
const isAdmin = await checkAdmin();
|
||||
const _adminData = await GERP.CheckAdmin();
|
||||
_roleScope = _adminData ? (_adminData.role_scope || null) : null;
|
||||
applyScopeUI();
|
||||
if (isAdmin) {
|
||||
isAdminMode = true;
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = 'inline-block';
|
||||
}
|
||||
isAdminMode = GERP.ApplyAdminBadge(_adminData);
|
||||
|
||||
try {
|
||||
let columns;
|
||||
@@ -126,7 +110,7 @@
|
||||
pageSize: 20,
|
||||
showPagination: true,
|
||||
showCheckbox: true,
|
||||
editable: isAdmin,
|
||||
editable: isAdminMode,
|
||||
sortable: true,
|
||||
filterable: true,
|
||||
striped: true,
|
||||
|
||||
@@ -119,14 +119,6 @@
|
||||
|
||||
GERP.SetTitle('操作审计日志');
|
||||
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
function buildFilters() {
|
||||
const params = new URLSearchParams();
|
||||
const table = document.getElementById('filterTable').value;
|
||||
@@ -155,7 +147,7 @@
|
||||
|
||||
try {
|
||||
// 仅管理员可见
|
||||
const isAdmin = await checkAdmin();
|
||||
const isAdmin = !!(await GERP.CheckAdmin())?.is_admin;
|
||||
if (!isAdmin) {
|
||||
loadingEl.style.display = 'none';
|
||||
errorEl.textContent = '无权访问审计日志,仅管理员可查看';
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-database icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">数据库管理</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
@@ -62,15 +62,6 @@
|
||||
const isSubServer = !!serverName;
|
||||
let isAdminMode = false;
|
||||
|
||||
/** 检查当前用户是否具有管理员特权 */
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
function buildApiUrl(path, params = {}) {
|
||||
const allParams = {};
|
||||
if (isSubServer) allParams.server = serverName;
|
||||
@@ -82,16 +73,14 @@
|
||||
|
||||
async function init() {
|
||||
// 入口校验:仅管理员可访问数据库管理页
|
||||
const isAdmin = await checkAdmin();
|
||||
if (!isAdmin) {
|
||||
const adminData = await GERP.CheckAdmin();
|
||||
if (!GERP.ApplyAdminBadge(adminData)) {
|
||||
document.getElementById('section-static').style.display = 'none';
|
||||
document.getElementById('section-dynamic').style.display = 'none';
|
||||
document.getElementById('deniedState').style.display = 'block';
|
||||
return;
|
||||
}
|
||||
isAdminMode = true;
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = 'inline-block';
|
||||
if (isSubServer) {
|
||||
document.getElementById('back-nav').style.display = 'flex';
|
||||
document.getElementById('section-static').style.display = 'none';
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-table icon-primary icon-left-lg"></i>
|
||||
<span id="table-title">未选择表</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
@@ -44,15 +44,6 @@
|
||||
let _helper = null;
|
||||
let isAdminMode = false;
|
||||
|
||||
/** 检查当前用户是否具有管理员特权 */
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
function showDenied() {
|
||||
document.getElementById('TableContainer').style.display = 'none';
|
||||
document.getElementById('table-info').style.display = 'none';
|
||||
@@ -68,14 +59,12 @@
|
||||
}
|
||||
|
||||
// 入口校验:仅管理员可访问数据库表浏览页
|
||||
const isAdmin = await checkAdmin();
|
||||
if (!isAdmin) {
|
||||
const adminData = await GERP.CheckAdmin();
|
||||
if (!GERP.ApplyAdminBadge(adminData)) {
|
||||
showDenied();
|
||||
return;
|
||||
}
|
||||
isAdminMode = true;
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = 'inline-block';
|
||||
|
||||
if (isSubServer) {
|
||||
GERP.SetTitle(`${serverName} / ${tableTitle}`);
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-bars icon-primary icon-left-lg"></i>
|
||||
<span>菜单编辑器</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
<div class="company-search-wrap" id="companySearchWrap">
|
||||
<input type="text" class="GERPInput company-search-input" id="companySearchInput" placeholder="搜索公司添加标签页...">
|
||||
@@ -221,15 +221,6 @@
|
||||
let _accessVerified = false; // 入口校验是否已通过
|
||||
const currentServer = new URLSearchParams(window.location.search).get('server') || 'gvsds-master';
|
||||
|
||||
/** 检查当前用户是否具有管理员特权 */
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch(buildApiUrl('/API/FormAPI/CheckAdmin'), { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
function buildApiUrl(path, params = {}) {
|
||||
const allParams = {};
|
||||
if (currentServer !== 'gvsds-master') allParams.server = currentServer;
|
||||
@@ -253,15 +244,14 @@
|
||||
}
|
||||
|
||||
// 同步先隐藏关键交互,待异步校验通过后再启用
|
||||
const _pendingVerify = checkAdmin().then(r => {
|
||||
if (!r) {
|
||||
const _pendingVerify = GERP.CheckAdmin().then(_adminData => {
|
||||
const _isAdmin = GERP.ApplyAdminBadge(_adminData);
|
||||
if (!_isAdmin) {
|
||||
showDenied();
|
||||
return false;
|
||||
}
|
||||
_accessVerified = true;
|
||||
isAdminMode = true;
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = 'inline-block';
|
||||
return true;
|
||||
});
|
||||
|
||||
@@ -553,6 +543,17 @@
|
||||
}
|
||||
}
|
||||
|
||||
function wrapIcon(iconStr) {
|
||||
// 统一包裹 <i> 标签:输入纯 class(fas fa-xxx)或已含 <i> 的 HTML,输出 <i class="..."></i>
|
||||
if (!iconStr) return '<i class="fas fa-circle" style="font-size:6px;"></i>';
|
||||
const s = String(iconStr).trim();
|
||||
if (s.startsWith('<')) {
|
||||
// 已含 HTML 标签,原样返回(兼容旧数据)
|
||||
return s;
|
||||
}
|
||||
return `<i class="${s}"></i>`;
|
||||
}
|
||||
|
||||
function renderNodes(nodes) {
|
||||
let html = '';
|
||||
const selUUID = getActiveSelectedUUID();
|
||||
@@ -563,7 +564,7 @@
|
||||
const visBadge = node.CompanyUUID ? '<span class="menu-badge private">私有</span>' : '<span class="menu-badge public">公有</span>';
|
||||
const permBadge = node.PermissionAttr ? `<span class="menu-badge perm" title="${node.PermissionAttr}">${node.PermissionAttr}</span>` : '';
|
||||
html += `<div class="menu-node ${isSelected ? 'selected' : ''}" data-uuid="${node.MenuUUID}">
|
||||
<span class="menu-node-icon">${node.MenuIcon || '<i class="fas fa-circle" style="font-size:6px;"></i>'}</span>
|
||||
<span class="menu-node-icon">${wrapIcon(node.MenuIcon)}</span>
|
||||
<span class="menu-node-title">${node.MenuTitle || node.MenuName}</span>
|
||||
${visBadge}${typeBadge}${disabledBadge}${permBadge}
|
||||
<span class="menu-node-actions">
|
||||
@@ -889,6 +890,10 @@
|
||||
fIcon.addEventListener('input', updateIconPreview);
|
||||
|
||||
function getFormData() {
|
||||
// 保留当前选中菜单的 ParentMenuUUID——表单不编辑父菜单,
|
||||
// 必须回传原值,否则后端会将 ParentMenuUUID 置空导致菜单变成根菜单(野菜单)
|
||||
const tab = getActiveTab();
|
||||
const selectedMenu = tab && tab.selectedUUID ? tab.menus.find(m => m.MenuUUID === tab.selectedUUID) : null;
|
||||
return {
|
||||
MenuTitle: fTitle.value.trim(), MenuName: fName.value.trim(),
|
||||
MenuIcon: fIcon.value.trim(), MenuLink: fLink.value.trim(),
|
||||
@@ -896,6 +901,7 @@
|
||||
PermissionLevel: parseFloat(fPermLevel.value) || 1.0,
|
||||
PermissionAttr: fPermAttr.value.trim(), MenuStatus: fStatusValue,
|
||||
CompanyUUID: fVisibilityValue === 'public' ? '' : getActiveCompanyUUID(),
|
||||
ParentMenuUUID: selectedMenu ? (selectedMenu.ParentMenuUUID || '') : '',
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-network-wired icon-primary icon-left-lg"></i>
|
||||
MSYNC 服务器管理
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
<div style="display:flex;align-items:center;gap:12px;">
|
||||
<span class="msync-timezone-badge" id="tz-badge">
|
||||
@@ -168,15 +168,6 @@
|
||||
const API_BASE = '/api/gerp/msync/servers/';
|
||||
let isAdminMode = false;
|
||||
|
||||
/** 检查当前用户是否具有管理员特权 */
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
function buildApiUrl(path, params = {}) {
|
||||
const allParams = {};
|
||||
if (isAdminMode) allParams.admin_verify = '1';
|
||||
@@ -235,11 +226,8 @@
|
||||
// 检查管理员特权(每次刷新时检查,仅当 URL 带 admin_verify=1 时启用)
|
||||
if (!isAdminMode) {
|
||||
const _hasAdminVerify = new URLSearchParams(window.location.search).get('admin_verify') === '1';
|
||||
isAdminMode = _hasAdminVerify ? await checkAdmin() : false;
|
||||
if (isAdminMode) {
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = 'inline-block';
|
||||
}
|
||||
const _adminData = _hasAdminVerify ? await GERP.CheckAdmin() : null;
|
||||
isAdminMode = GERP.ApplyAdminBadge(_adminData);
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
@@ -141,14 +141,6 @@
|
||||
'wechat': '微信支付', 'alipay': '支付宝', 'bank': '银行直连', 'other': '其他',
|
||||
};
|
||||
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
async function loadConfigs() {
|
||||
const gridEl = document.getElementById('configGrid');
|
||||
const emptyEl = document.getElementById('emptyState');
|
||||
@@ -162,7 +154,7 @@
|
||||
errorEl.style.display = 'none';
|
||||
loadingEl.style.display = 'block';
|
||||
|
||||
const isAdmin = await checkAdmin();
|
||||
const isAdmin = !!(await GERP.CheckAdmin())?.is_admin;
|
||||
if (!isAdmin) {
|
||||
loadingEl.style.display = 'none';
|
||||
errorEl.textContent = '无权访问:仅管理员可查看支付网关配置';
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<i class="fas fa-user-tag icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">角色详情</span>
|
||||
</h1>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
<button class="GERPBtn Primary" onclick="handleEdit()" style="margin-left:auto;"><i class="fas fa-edit"></i> 编辑</button>
|
||||
<button class="GERPBtn Secondary" onclick="goPermissionTree()" title="按权限组勾选分配权限"><i class="fas fa-sitemap"></i> 权限树分配</button>
|
||||
</div>
|
||||
@@ -37,17 +37,6 @@
|
||||
let permTable = null;
|
||||
let isAdminMode = false;
|
||||
|
||||
/** 检查当前用户是否具有管理员特权 */
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch(buildApiUrl('/API/FormAPI/CheckAdmin'), { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function buildApiUrl(path, params = {}) {
|
||||
const allParams = {};
|
||||
if (currentServer !== 'gvsds-master') allParams.server = currentServer;
|
||||
@@ -79,11 +68,8 @@
|
||||
}
|
||||
|
||||
// 先检查管理员特权(仅当 URL 带 admin_verify=1 时启用)
|
||||
isAdminMode = CompanyUtils.hasAdminVerifyArg() ? await checkAdmin() : false;
|
||||
const adminBadge = document.getElementById('admin-badge');
|
||||
if (isAdminMode) {
|
||||
adminBadge.style.display = 'inline-block';
|
||||
}
|
||||
const _adminData = CompanyUtils.hasAdminVerifyArg() ? await GERP.CheckAdmin() : null;
|
||||
isAdminMode = GERP.ApplyAdminBadge(_adminData);
|
||||
|
||||
try {
|
||||
const dataResp = await fetch(buildApiUrl('/API/FormAPI/Get/Role', { RoleUUID: roleUUID, PageSize: '1' }), { credentials: 'include' });
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<i class="fas fa-shield-alt icon-primary icon-left-lg"></i>
|
||||
<span>角色权限分配</span>
|
||||
</h1>
|
||||
<span id="admin-badge" style="display:none;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</div>
|
||||
|
||||
<div class="rp-toolbar">
|
||||
@@ -105,14 +105,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
function apiQs(extra = {}) {
|
||||
const params = {};
|
||||
if (_isAdminMode) params.admin_verify = '1';
|
||||
@@ -123,7 +115,8 @@
|
||||
|
||||
async function init() {
|
||||
// 入口校验:仅管理员可访问角色权限分配页
|
||||
const isAdmin = await checkAdmin();
|
||||
const _adminData = await GERP.CheckAdmin();
|
||||
const isAdmin = GERP.ApplyAdminBadge(_adminData);
|
||||
if (!isAdmin) {
|
||||
document.querySelector('.rp-toolbar').style.display = 'none';
|
||||
document.querySelector('.rp-tree-wrap').style.display = 'none';
|
||||
@@ -132,7 +125,6 @@
|
||||
return;
|
||||
}
|
||||
_isAdminMode = true;
|
||||
document.getElementById('admin-badge').style.display = 'inline-block';
|
||||
|
||||
await Promise.all([loadRoles(), loadCompanies()]);
|
||||
|
||||
|
||||
@@ -37,22 +37,12 @@
|
||||
return qs ? `${path}?${qs}` : path;
|
||||
}
|
||||
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch(buildApiUrl('/API/FormAPI/CheckAdmin'), { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async function initTable() {
|
||||
const containerEl = document.getElementById('TableContainer');
|
||||
|
||||
// 先检查管理员特权(仅当 URL 带 admin_verify=1 时启用)
|
||||
const _hasAdminVerify = new URLSearchParams(window.location.search).get('admin_verify') === '1';
|
||||
_isAdminMode = _hasAdminVerify ? await checkAdmin() : false;
|
||||
_isAdminMode = _hasAdminVerify ? !!(await GERP.CheckAdmin())?.is_admin : false;
|
||||
|
||||
try {
|
||||
let columns;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<i class="fas fa-user-circle icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">用户详情</span>
|
||||
</h1>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
<button class="GERPBtn Primary" onclick="handleEdit()" style="margin-left:auto;"><i class="fas fa-edit"></i> 编辑</button>
|
||||
</div>
|
||||
<div class="cp-container" id="detailContainer" style="overflow:auto;">
|
||||
@@ -36,17 +36,6 @@
|
||||
let deptTable = null;
|
||||
let isAdminMode = false;
|
||||
|
||||
/** 检查当前用户是否具有管理员特权 */
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch(buildApiUrl('/API/FormAPI/CheckAdmin'), { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function buildApiUrl(path, params = {}) {
|
||||
const allParams = {};
|
||||
if (currentServer !== 'gvsds-master') allParams.server = currentServer;
|
||||
@@ -75,11 +64,8 @@
|
||||
}
|
||||
|
||||
// 先检查管理员特权,决定是否启用无隔离模式(仅当 URL 带 admin_verify=1 时启用)
|
||||
isAdminMode = CompanyUtils.hasAdminVerifyArg() ? await checkAdmin() : false;
|
||||
const adminBadge = document.getElementById('admin-badge');
|
||||
if (isAdminMode) {
|
||||
adminBadge.style.display = 'inline-block';
|
||||
}
|
||||
const _adminData = CompanyUtils.hasAdminVerifyArg() ? await GERP.CheckAdmin() : null;
|
||||
isAdminMode = GERP.ApplyAdminBadge(_adminData);
|
||||
|
||||
try {
|
||||
const dataResp = await fetch(buildApiUrl('/API/FormAPI/Get/User', { UserUUID: userUUID, PageSize: '1' }), { credentials: 'include' });
|
||||
|
||||
@@ -109,14 +109,6 @@
|
||||
return qs ? `${path}?${qs}` : path;
|
||||
}
|
||||
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch(buildApiUrl('/API/FormAPI/CheckAdmin'), { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
return result.code === 0 && result.data && result.data.is_admin;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
async function loadContext() {
|
||||
try {
|
||||
const resp = await fetch(buildApiUrl('/API/FormAPI/CheckAdmin'), { credentials: 'include' });
|
||||
@@ -134,7 +126,7 @@
|
||||
|
||||
async function initTable() {
|
||||
// 入口校验:仅管理员可访问 UserRole 调试页
|
||||
const isAdmin = await checkAdmin();
|
||||
const isAdmin = !!(await GERP.CheckAdmin())?.is_admin;
|
||||
if (!isAdmin) {
|
||||
document.querySelectorAll('.section').forEach(el => el.style.display = 'none');
|
||||
document.getElementById('ctxBar').style.display = 'none';
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<h1 class="PageTitle">
|
||||
<i class="fas fa-users icon-primary icon-left-lg"></i>
|
||||
<span id="page-title">用户管理</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
|
||||
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> <span id="admin-badge-text">特权模式</span></span>
|
||||
</h1>
|
||||
</div>
|
||||
<div id="scopeBanner" class="user-scope-banner admin" style="display:none;"></div>
|
||||
@@ -34,19 +34,6 @@
|
||||
let isAdminMode = false;
|
||||
let _roleScope = null; // {Type, TypeLabel, IsAdmin, IsDeptManager, IsWorkgroupLead, IsMember, DeptUUID, WorkgroupUUID}
|
||||
|
||||
/** 检查当前用户是否具有管理员特权,并填充 _roleScope */
|
||||
async function checkAdmin() {
|
||||
try {
|
||||
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
|
||||
const result = await resp.json();
|
||||
if (result.code === 0 && result.data) {
|
||||
_roleScope = result.data.role_scope || null;
|
||||
return result.data.is_admin;
|
||||
}
|
||||
return false;
|
||||
} catch (e) { return false; }
|
||||
}
|
||||
|
||||
function buildApiUrl(path, params = {}) {
|
||||
const allParams = {};
|
||||
if (currentServer !== 'gvsds-master') allParams.server = currentServer;
|
||||
@@ -93,13 +80,10 @@
|
||||
const containerEl = document.getElementById('TableContainer');
|
||||
|
||||
// 入口校验:获取 role_scope 并差异化显示
|
||||
const isAdmin = await checkAdmin();
|
||||
const _adminData = await GERP.CheckAdmin();
|
||||
_roleScope = _adminData ? (_adminData.role_scope || null) : null;
|
||||
applyScopeUI();
|
||||
if (isAdmin) {
|
||||
isAdminMode = true;
|
||||
const badge = document.getElementById('admin-badge');
|
||||
if (badge) badge.style.display = 'inline-block';
|
||||
}
|
||||
isAdminMode = GERP.ApplyAdminBadge(_adminData);
|
||||
|
||||
try {
|
||||
let columns;
|
||||
|
||||
+23
-6
@@ -143,7 +143,7 @@
|
||||
<img src="/assets/mien_notresize/10.png" alt="Minecraft服务器游戏场景" class="rounded-lg shadow-2xl">
|
||||
<div class="absolute -bottom-6 -right-6 bg-primary/90 p-4 rounded-lg shadow-lg">
|
||||
<p class="font-bold text-white">SERVER</p>
|
||||
<p class="text-2xl font-bold text-white" id="player-count">1.21.8</p>
|
||||
<p class="text-2xl font-bold text-white" id="player-count">1.21.10</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-12 space-y-4">
|
||||
@@ -316,7 +316,19 @@
|
||||
activateBtn.innerHTML = '<i class="fa fa-spinner fa-spin mr-2"></i><span>绑定中...</span>';
|
||||
|
||||
try {
|
||||
// 3. 发起fetch请求
|
||||
// 3. 先刷新 AccessToken Cookie(避免 access token 过期导致 401)
|
||||
// RefreshToken Cookie 跨子域共享(domain=.gvsds.com),AllowAny 权限
|
||||
try {
|
||||
await fetch('/Auth/RefreshToken', {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
});
|
||||
} catch (refreshErr) {
|
||||
// 刷新失败不阻断流程,继续尝试绑定(后端会返回 401)
|
||||
console.warn('刷新 AccessToken 失败:', refreshErr);
|
||||
}
|
||||
|
||||
// 4. 发起绑定请求
|
||||
const response = await fetch('/API/UserBind.api', {
|
||||
method: 'POST', // 根据接口要求调整请求方法(GET/POST)
|
||||
headers: {
|
||||
@@ -330,13 +342,18 @@
|
||||
credentials: 'include' // 如需携带Cookie(如登录态),添加此配置
|
||||
});
|
||||
|
||||
// 4. 处理响应(确保响应为JSON格式)
|
||||
// 5. 处理响应(确保响应为JSON格式)
|
||||
if (!response.ok) {
|
||||
// 401 时跳转登录页(refresh token 也已失效)
|
||||
if (response.status === 401) {
|
||||
window.location.href = 'https://www.gvsds.com/login.html?return=' + encodeURIComponent(window.location.href);
|
||||
return;
|
||||
}
|
||||
throw new Error(`请求失败:${response.status} ${response.statusText}`);
|
||||
}
|
||||
const result = await response.json();
|
||||
|
||||
// 5. 根据返回状态处理
|
||||
// 6. 根据返回状态处理
|
||||
if (result.status === 0) {
|
||||
// 成功:跳转到redirect指定的地址
|
||||
if (result.redirect && typeof result.redirect === 'string') {
|
||||
@@ -353,11 +370,11 @@
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
// 6. 捕获网络错误或其他异常
|
||||
// 7. 捕获网络错误或其他异常
|
||||
errorContainer.innerHTML = `<p class="error-msg"><i class="fa fa-exclamation-circle mr-1"></i>网络错误:${error.message}</p>`;
|
||||
console.error('绑定请求异常:', error); // 控制台打印错误,便于调试
|
||||
} finally {
|
||||
// 7. 无论成功/失败,都重新启用按钮并恢复文本
|
||||
// 8. 无论成功/失败,都重新启用按钮并恢复文本
|
||||
activateBtn.disabled = false;
|
||||
activateBtn.innerHTML = '<span>绑定</span><i class="fa fa-arrow-right ml-2"></i>';
|
||||
}
|
||||
|
||||
@@ -425,10 +425,10 @@
|
||||
<p class="text-gray-300 mb-3">需先注册GVSDS账户,再将GVSDS账户与我的世界账户关联</p>
|
||||
<div class="flex items-center text-accent">
|
||||
<i class="fa fa-exclamation-circle mr-2"></i>
|
||||
<span>激活关联请联系 TermiNexus(自动化流程待开发)</span>
|
||||
<span>自动化流程完成(确保已登录 GVSDS 账户)</span>
|
||||
</div>
|
||||
<a href="https://www.gvsds.com/enroll.html" target="_blank" class="mt-4 inline-block bg-primary/20 hover:bg-primary/30 text-accent px-4 py-2 rounded-lg transition-colors">
|
||||
<i class="fa fa-external-link mr-1"></i> 前往注册账户
|
||||
<a href="https://mc.gvsds.com/bind.html" target="_blank" class="mt-4 inline-block bg-primary/20 hover:bg-primary/30 text-accent px-4 py-2 rounded-lg transition-colors">
|
||||
<i class="fa fa-external-link mr-1"></i> 前往绑定账户
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:paletted_permutations",
|
||||
"palette_key": "minecraft:trims/color_palettes/trim_palette",
|
||||
"permutations": {
|
||||
"amethyst": "minecraft:trims/color_palettes/amethyst",
|
||||
"copper": "minecraft:trims/color_palettes/copper",
|
||||
"copper_darker": "minecraft:trims/color_palettes/copper_darker",
|
||||
"diamond": "minecraft:trims/color_palettes/diamond",
|
||||
"diamond_darker": "minecraft:trims/color_palettes/diamond_darker",
|
||||
"emerald": "minecraft:trims/color_palettes/emerald",
|
||||
"gold": "minecraft:trims/color_palettes/gold",
|
||||
"gold_darker": "minecraft:trims/color_palettes/gold_darker",
|
||||
"iron": "minecraft:trims/color_palettes/iron",
|
||||
"iron_darker": "minecraft:trims/color_palettes/iron_darker",
|
||||
"lapis": "minecraft:trims/color_palettes/lapis",
|
||||
"netherite": "minecraft:trims/color_palettes/netherite",
|
||||
"netherite_darker": "minecraft:trims/color_palettes/netherite_darker",
|
||||
"quartz": "minecraft:trims/color_palettes/quartz",
|
||||
"redstone": "minecraft:trims/color_palettes/redstone",
|
||||
"resin": "minecraft:trims/color_palettes/resin"
|
||||
},
|
||||
"textures": [
|
||||
"minecraft:trims/entity/humanoid/sentry",
|
||||
"minecraft:trims/entity/humanoid_leggings/sentry",
|
||||
"minecraft:trims/entity/humanoid/dune",
|
||||
"minecraft:trims/entity/humanoid_leggings/dune",
|
||||
"minecraft:trims/entity/humanoid/coast",
|
||||
"minecraft:trims/entity/humanoid_leggings/coast",
|
||||
"minecraft:trims/entity/humanoid/wild",
|
||||
"minecraft:trims/entity/humanoid_leggings/wild",
|
||||
"minecraft:trims/entity/humanoid/ward",
|
||||
"minecraft:trims/entity/humanoid_leggings/ward",
|
||||
"minecraft:trims/entity/humanoid/eye",
|
||||
"minecraft:trims/entity/humanoid_leggings/eye",
|
||||
"minecraft:trims/entity/humanoid/vex",
|
||||
"minecraft:trims/entity/humanoid_leggings/vex",
|
||||
"minecraft:trims/entity/humanoid/tide",
|
||||
"minecraft:trims/entity/humanoid_leggings/tide",
|
||||
"minecraft:trims/entity/humanoid/snout",
|
||||
"minecraft:trims/entity/humanoid_leggings/snout",
|
||||
"minecraft:trims/entity/humanoid/rib",
|
||||
"minecraft:trims/entity/humanoid_leggings/rib",
|
||||
"minecraft:trims/entity/humanoid/spire",
|
||||
"minecraft:trims/entity/humanoid_leggings/spire",
|
||||
"minecraft:trims/entity/humanoid/wayfinder",
|
||||
"minecraft:trims/entity/humanoid_leggings/wayfinder",
|
||||
"minecraft:trims/entity/humanoid/shaper",
|
||||
"minecraft:trims/entity/humanoid_leggings/shaper",
|
||||
"minecraft:trims/entity/humanoid/silence",
|
||||
"minecraft:trims/entity/humanoid_leggings/silence",
|
||||
"minecraft:trims/entity/humanoid/raiser",
|
||||
"minecraft:trims/entity/humanoid_leggings/raiser",
|
||||
"minecraft:trims/entity/humanoid/host",
|
||||
"minecraft:trims/entity/humanoid_leggings/host",
|
||||
"minecraft:trims/entity/humanoid/flow",
|
||||
"minecraft:trims/entity/humanoid_leggings/flow",
|
||||
"minecraft:trims/entity/humanoid/bolt",
|
||||
"minecraft:trims/entity/humanoid_leggings/bolt"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:single",
|
||||
"resource": "minecraft:entity/banner_base"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "entity/banner/",
|
||||
"source": "entity/banner"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "entity/bed/",
|
||||
"source": "entity/bed"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "block/",
|
||||
"source": "block"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "entity/conduit/",
|
||||
"source": "entity/conduit"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:single",
|
||||
"resource": "minecraft:entity/bell/bell_body"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:single",
|
||||
"resource": "minecraft:entity/enchanting_table_book"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "",
|
||||
"source": "environment/celestial"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "entity/chest/",
|
||||
"source": "entity/chest"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "entity/decorated_pot/",
|
||||
"source": "entity/decorated_pot"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "",
|
||||
"source": "gui/sprites"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "mob_effect/",
|
||||
"source": "mob_effect"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "item/",
|
||||
"source": "item"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:paletted_permutations",
|
||||
"palette_key": "minecraft:trims/color_palettes/trim_palette",
|
||||
"permutations": {
|
||||
"amethyst": "minecraft:trims/color_palettes/amethyst",
|
||||
"copper": "minecraft:trims/color_palettes/copper",
|
||||
"copper_darker": "minecraft:trims/color_palettes/copper_darker",
|
||||
"diamond": "minecraft:trims/color_palettes/diamond",
|
||||
"diamond_darker": "minecraft:trims/color_palettes/diamond_darker",
|
||||
"emerald": "minecraft:trims/color_palettes/emerald",
|
||||
"gold": "minecraft:trims/color_palettes/gold",
|
||||
"gold_darker": "minecraft:trims/color_palettes/gold_darker",
|
||||
"iron": "minecraft:trims/color_palettes/iron",
|
||||
"iron_darker": "minecraft:trims/color_palettes/iron_darker",
|
||||
"lapis": "minecraft:trims/color_palettes/lapis",
|
||||
"netherite": "minecraft:trims/color_palettes/netherite",
|
||||
"netherite_darker": "minecraft:trims/color_palettes/netherite_darker",
|
||||
"quartz": "minecraft:trims/color_palettes/quartz",
|
||||
"redstone": "minecraft:trims/color_palettes/redstone",
|
||||
"resin": "minecraft:trims/color_palettes/resin"
|
||||
},
|
||||
"textures": [
|
||||
"minecraft:trims/items/helmet_trim",
|
||||
"minecraft:trims/items/chestplate_trim",
|
||||
"minecraft:trims/items/leggings_trim",
|
||||
"minecraft:trims/items/boots_trim"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "",
|
||||
"source": "map/decorations"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "",
|
||||
"source": "painting"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "",
|
||||
"source": "particle"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:single",
|
||||
"resource": "minecraft:entity/shield_base"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:single",
|
||||
"resource": "minecraft:entity/shield_base_nopattern"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "entity/shield/",
|
||||
"source": "entity/shield"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "entity/shulker/",
|
||||
"source": "entity/shulker"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"type": "minecraft:directory",
|
||||
"prefix": "entity/signs/",
|
||||
"source": "entity/signs"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"face=ceiling,facing=east,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"face=ceiling,facing=north,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=north,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=south,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"x": 180
|
||||
},
|
||||
"face=ceiling,facing=south,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"x": 180
|
||||
},
|
||||
"face=ceiling,facing=west,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=west,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=east,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=east,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north,powered=false": {
|
||||
"model": "minecraft:block/acacia_button"
|
||||
},
|
||||
"face=floor,facing=north,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed"
|
||||
},
|
||||
"face=floor,facing=south,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=south,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=west,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=east,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"uvlock": true,
|
||||
"x": 90
|
||||
},
|
||||
"face=wall,facing=north,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90
|
||||
},
|
||||
"face=wall,facing=south,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=south,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west,powered=false": {
|
||||
"model": "minecraft:block/acacia_button",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=west,powered=true": {
|
||||
"model": "minecraft:block/acacia_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower,hinge=left,open=false": {
|
||||
"model": "minecraft:block/acacia_door_bottom_left"
|
||||
},
|
||||
"facing=east,half=lower,hinge=left,open=true": {
|
||||
"model": "minecraft:block/acacia_door_bottom_left_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=lower,hinge=right,open=false": {
|
||||
"model": "minecraft:block/acacia_door_bottom_right"
|
||||
},
|
||||
"facing=east,half=lower,hinge=right,open=true": {
|
||||
"model": "minecraft:block/acacia_door_bottom_right_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper,hinge=left,open=false": {
|
||||
"model": "minecraft:block/acacia_door_top_left"
|
||||
},
|
||||
"facing=east,half=upper,hinge=left,open=true": {
|
||||
"model": "minecraft:block/acacia_door_top_left_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=upper,hinge=right,open=false": {
|
||||
"model": "minecraft:block/acacia_door_top_right"
|
||||
},
|
||||
"facing=east,half=upper,hinge=right,open=true": {
|
||||
"model": "minecraft:block/acacia_door_top_right_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=lower,hinge=left,open=false": {
|
||||
"model": "minecraft:block/acacia_door_bottom_left",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=lower,hinge=left,open=true": {
|
||||
"model": "minecraft:block/acacia_door_bottom_left_open"
|
||||
},
|
||||
"facing=north,half=lower,hinge=right,open=false": {
|
||||
"model": "minecraft:block/acacia_door_bottom_right",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=lower,hinge=right,open=true": {
|
||||
"model": "minecraft:block/acacia_door_bottom_right_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=upper,hinge=left,open=false": {
|
||||
"model": "minecraft:block/acacia_door_top_left",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=upper,hinge=left,open=true": {
|
||||
"model": "minecraft:block/acacia_door_top_left_open"
|
||||
},
|
||||
"facing=north,half=upper,hinge=right,open=false": {
|
||||
"model": "minecraft:block/acacia_door_top_right",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=upper,hinge=right,open=true": {
|
||||
"model": "minecraft:block/acacia_door_top_right_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=lower,hinge=left,open=false": {
|
||||
"model": "minecraft:block/acacia_door_bottom_left",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=lower,hinge=left,open=true": {
|
||||
"model": "minecraft:block/acacia_door_bottom_left_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=lower,hinge=right,open=false": {
|
||||
"model": "minecraft:block/acacia_door_bottom_right",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=lower,hinge=right,open=true": {
|
||||
"model": "minecraft:block/acacia_door_bottom_right_open"
|
||||
},
|
||||
"facing=south,half=upper,hinge=left,open=false": {
|
||||
"model": "minecraft:block/acacia_door_top_left",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=upper,hinge=left,open=true": {
|
||||
"model": "minecraft:block/acacia_door_top_left_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=upper,hinge=right,open=false": {
|
||||
"model": "minecraft:block/acacia_door_top_right",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=upper,hinge=right,open=true": {
|
||||
"model": "minecraft:block/acacia_door_top_right_open"
|
||||
},
|
||||
"facing=west,half=lower,hinge=left,open=false": {
|
||||
"model": "minecraft:block/acacia_door_bottom_left",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower,hinge=left,open=true": {
|
||||
"model": "minecraft:block/acacia_door_bottom_left_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=lower,hinge=right,open=false": {
|
||||
"model": "minecraft:block/acacia_door_bottom_right",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower,hinge=right,open=true": {
|
||||
"model": "minecraft:block/acacia_door_bottom_right_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=upper,hinge=left,open=false": {
|
||||
"model": "minecraft:block/acacia_door_top_left",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper,hinge=left,open=true": {
|
||||
"model": "minecraft:block/acacia_door_top_left_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=upper,hinge=right,open=false": {
|
||||
"model": "minecraft:block/acacia_door_top_right",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper,hinge=right,open=true": {
|
||||
"model": "minecraft:block/acacia_door_top_right_open",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"multipart": [
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_fence_post"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_fence_side",
|
||||
"uvlock": true
|
||||
},
|
||||
"when": {
|
||||
"north": "true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_fence_side",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"east": "true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_fence_side",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"south": "true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_fence_side",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"west": "true"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,in_wall=false,open=false": {
|
||||
"model": "minecraft:block/acacia_fence_gate",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,in_wall=false,open=true": {
|
||||
"model": "minecraft:block/acacia_fence_gate_open",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,in_wall=true,open=false": {
|
||||
"model": "minecraft:block/acacia_fence_gate_wall",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,in_wall=true,open=true": {
|
||||
"model": "minecraft:block/acacia_fence_gate_wall_open",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,in_wall=false,open=false": {
|
||||
"model": "minecraft:block/acacia_fence_gate",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,in_wall=false,open=true": {
|
||||
"model": "minecraft:block/acacia_fence_gate_open",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,in_wall=true,open=false": {
|
||||
"model": "minecraft:block/acacia_fence_gate_wall",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,in_wall=true,open=true": {
|
||||
"model": "minecraft:block/acacia_fence_gate_wall_open",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,in_wall=false,open=false": {
|
||||
"model": "minecraft:block/acacia_fence_gate",
|
||||
"uvlock": true
|
||||
},
|
||||
"facing=south,in_wall=false,open=true": {
|
||||
"model": "minecraft:block/acacia_fence_gate_open",
|
||||
"uvlock": true
|
||||
},
|
||||
"facing=south,in_wall=true,open=false": {
|
||||
"model": "minecraft:block/acacia_fence_gate_wall",
|
||||
"uvlock": true
|
||||
},
|
||||
"facing=south,in_wall=true,open=true": {
|
||||
"model": "minecraft:block/acacia_fence_gate_wall_open",
|
||||
"uvlock": true
|
||||
},
|
||||
"facing=west,in_wall=false,open=false": {
|
||||
"model": "minecraft:block/acacia_fence_gate",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,in_wall=false,open=true": {
|
||||
"model": "minecraft:block/acacia_fence_gate_open",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,in_wall=true,open=false": {
|
||||
"model": "minecraft:block/acacia_fence_gate_wall",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,in_wall=true,open=true": {
|
||||
"model": "minecraft:block/acacia_fence_gate_wall_open",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/acacia_hanging_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/acacia_leaves"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"variants": {
|
||||
"axis=x": {
|
||||
"model": "minecraft:block/acacia_log_horizontal",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"axis=y": {
|
||||
"model": "minecraft:block/acacia_log"
|
||||
},
|
||||
"axis=z": {
|
||||
"model": "minecraft:block/acacia_log_horizontal",
|
||||
"x": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/acacia_planks"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"variants": {
|
||||
"powered=false": {
|
||||
"model": "minecraft:block/acacia_pressure_plate"
|
||||
},
|
||||
"powered=true": {
|
||||
"model": "minecraft:block/acacia_pressure_plate_down"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/acacia_sapling"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,402 @@
|
||||
{
|
||||
"multipart": [
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf"
|
||||
},
|
||||
"when": {
|
||||
"facing": "north"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"facing": "east"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"facing": "south"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"facing": "west"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_unpowered"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "false"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "false"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "false"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "false"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_unconnected"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "unconnected"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_unconnected",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "unconnected"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_unconnected",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "unconnected"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_unconnected",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "unconnected"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_left"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "left"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_left",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "left"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_left",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "left"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_left",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "left"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_center"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_center",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_center",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_center",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_right"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "right"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_right",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "right"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_right",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "right"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/acacia_shelf_right",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "right"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/acacia_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"variants": {
|
||||
"type=bottom": {
|
||||
"model": "minecraft:block/acacia_slab"
|
||||
},
|
||||
"type=double": {
|
||||
"model": "minecraft:block/acacia_planks"
|
||||
},
|
||||
"type=top": {
|
||||
"model": "minecraft:block/acacia_slab_top"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/acacia_stairs_inner"
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/acacia_stairs_outer"
|
||||
},
|
||||
"facing=east,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/acacia_stairs"
|
||||
},
|
||||
"facing=east,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=straight": {
|
||||
"model": "minecraft:block/acacia_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/acacia_stairs",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=straight": {
|
||||
"model": "minecraft:block/acacia_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/acacia_stairs_inner"
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/acacia_stairs_outer"
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/acacia_stairs",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=straight": {
|
||||
"model": "minecraft:block/acacia_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/acacia_stairs",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/acacia_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/acacia_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=straight": {
|
||||
"model": "minecraft:block/acacia_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=bottom,open=false": {
|
||||
"model": "minecraft:block/acacia_trapdoor_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=bottom,open=true": {
|
||||
"model": "minecraft:block/acacia_trapdoor_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,open=false": {
|
||||
"model": "minecraft:block/acacia_trapdoor_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,open=true": {
|
||||
"model": "minecraft:block/acacia_trapdoor_open",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,open=false": {
|
||||
"model": "minecraft:block/acacia_trapdoor_bottom"
|
||||
},
|
||||
"facing=north,half=bottom,open=true": {
|
||||
"model": "minecraft:block/acacia_trapdoor_open"
|
||||
},
|
||||
"facing=north,half=top,open=false": {
|
||||
"model": "minecraft:block/acacia_trapdoor_top"
|
||||
},
|
||||
"facing=north,half=top,open=true": {
|
||||
"model": "minecraft:block/acacia_trapdoor_open",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=bottom,open=false": {
|
||||
"model": "minecraft:block/acacia_trapdoor_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=bottom,open=true": {
|
||||
"model": "minecraft:block/acacia_trapdoor_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,open=false": {
|
||||
"model": "minecraft:block/acacia_trapdoor_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,open=true": {
|
||||
"model": "minecraft:block/acacia_trapdoor_open",
|
||||
"x": 180
|
||||
},
|
||||
"facing=west,half=bottom,open=false": {
|
||||
"model": "minecraft:block/acacia_trapdoor_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=bottom,open=true": {
|
||||
"model": "minecraft:block/acacia_trapdoor_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,open=false": {
|
||||
"model": "minecraft:block/acacia_trapdoor_top",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,open=true": {
|
||||
"model": "minecraft:block/acacia_trapdoor_open",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/acacia_hanging_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/acacia_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"variants": {
|
||||
"axis=x": {
|
||||
"model": "minecraft:block/acacia_wood",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"axis=y": {
|
||||
"model": "minecraft:block/acacia_wood"
|
||||
},
|
||||
"axis=z": {
|
||||
"model": "minecraft:block/acacia_wood",
|
||||
"x": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"variants": {
|
||||
"powered=false,shape=ascending_east": {
|
||||
"model": "minecraft:block/activator_rail_raised_ne",
|
||||
"y": 90
|
||||
},
|
||||
"powered=false,shape=ascending_north": {
|
||||
"model": "minecraft:block/activator_rail_raised_ne"
|
||||
},
|
||||
"powered=false,shape=ascending_south": {
|
||||
"model": "minecraft:block/activator_rail_raised_sw"
|
||||
},
|
||||
"powered=false,shape=ascending_west": {
|
||||
"model": "minecraft:block/activator_rail_raised_sw",
|
||||
"y": 90
|
||||
},
|
||||
"powered=false,shape=east_west": {
|
||||
"model": "minecraft:block/activator_rail",
|
||||
"y": 90
|
||||
},
|
||||
"powered=false,shape=north_south": {
|
||||
"model": "minecraft:block/activator_rail"
|
||||
},
|
||||
"powered=true,shape=ascending_east": {
|
||||
"model": "minecraft:block/activator_rail_on_raised_ne",
|
||||
"y": 90
|
||||
},
|
||||
"powered=true,shape=ascending_north": {
|
||||
"model": "minecraft:block/activator_rail_on_raised_ne"
|
||||
},
|
||||
"powered=true,shape=ascending_south": {
|
||||
"model": "minecraft:block/activator_rail_on_raised_sw"
|
||||
},
|
||||
"powered=true,shape=ascending_west": {
|
||||
"model": "minecraft:block/activator_rail_on_raised_sw",
|
||||
"y": 90
|
||||
},
|
||||
"powered=true,shape=east_west": {
|
||||
"model": "minecraft:block/activator_rail_on",
|
||||
"y": 90
|
||||
},
|
||||
"powered=true,shape=north_south": {
|
||||
"model": "minecraft:block/activator_rail_on"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/air"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/allium"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/amethyst_block"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=down": {
|
||||
"model": "minecraft:block/amethyst_cluster",
|
||||
"x": 180
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "minecraft:block/amethyst_cluster",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "minecraft:block/amethyst_cluster",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "minecraft:block/amethyst_cluster",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=up": {
|
||||
"model": "minecraft:block/amethyst_cluster"
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "minecraft:block/amethyst_cluster",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/ancient_debris"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/andesite"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"variants": {
|
||||
"type=bottom": {
|
||||
"model": "minecraft:block/andesite_slab"
|
||||
},
|
||||
"type=double": {
|
||||
"model": "minecraft:block/andesite"
|
||||
},
|
||||
"type=top": {
|
||||
"model": "minecraft:block/andesite_slab_top"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/andesite_stairs_inner"
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/andesite_stairs_outer"
|
||||
},
|
||||
"facing=east,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/andesite_stairs"
|
||||
},
|
||||
"facing=east,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=straight": {
|
||||
"model": "minecraft:block/andesite_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/andesite_stairs",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=straight": {
|
||||
"model": "minecraft:block/andesite_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/andesite_stairs_inner"
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/andesite_stairs_outer"
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/andesite_stairs",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=straight": {
|
||||
"model": "minecraft:block/andesite_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/andesite_stairs",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/andesite_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/andesite_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=straight": {
|
||||
"model": "minecraft:block/andesite_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"multipart": [
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/andesite_wall_post"
|
||||
},
|
||||
"when": {
|
||||
"up": "true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/andesite_wall_side",
|
||||
"uvlock": true
|
||||
},
|
||||
"when": {
|
||||
"north": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/andesite_wall_side",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"east": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/andesite_wall_side",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"south": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/andesite_wall_side",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"west": "low"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/andesite_wall_side_tall",
|
||||
"uvlock": true
|
||||
},
|
||||
"when": {
|
||||
"north": "tall"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/andesite_wall_side_tall",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"east": "tall"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/andesite_wall_side_tall",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"south": "tall"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/andesite_wall_side_tall",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"west": "tall"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "minecraft:block/anvil",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "minecraft:block/anvil",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "minecraft:block/anvil"
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "minecraft:block/anvil",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "minecraft:block/attached_melon_stem",
|
||||
"y": 180
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "minecraft:block/attached_melon_stem",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "minecraft:block/attached_melon_stem",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "minecraft:block/attached_melon_stem"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "minecraft:block/attached_pumpkin_stem",
|
||||
"y": 180
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "minecraft:block/attached_pumpkin_stem",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "minecraft:block/attached_pumpkin_stem",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "minecraft:block/attached_pumpkin_stem"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/azalea"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/azalea_leaves"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/azure_bluet"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"multipart": [
|
||||
{
|
||||
"apply": [
|
||||
{
|
||||
"model": "minecraft:block/bamboo1_age0"
|
||||
},
|
||||
{
|
||||
"model": "minecraft:block/bamboo2_age0"
|
||||
},
|
||||
{
|
||||
"model": "minecraft:block/bamboo3_age0"
|
||||
},
|
||||
{
|
||||
"model": "minecraft:block/bamboo4_age0"
|
||||
}
|
||||
],
|
||||
"when": {
|
||||
"age": "0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": [
|
||||
{
|
||||
"model": "minecraft:block/bamboo1_age1"
|
||||
},
|
||||
{
|
||||
"model": "minecraft:block/bamboo2_age1"
|
||||
},
|
||||
{
|
||||
"model": "minecraft:block/bamboo3_age1"
|
||||
},
|
||||
{
|
||||
"model": "minecraft:block/bamboo4_age1"
|
||||
}
|
||||
],
|
||||
"when": {
|
||||
"age": "1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_small_leaves"
|
||||
},
|
||||
"when": {
|
||||
"leaves": "small"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_large_leaves"
|
||||
},
|
||||
"when": {
|
||||
"leaves": "large"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"variants": {
|
||||
"axis=x": {
|
||||
"model": "minecraft:block/bamboo_block_x"
|
||||
},
|
||||
"axis=y": {
|
||||
"model": "minecraft:block/bamboo_block_y"
|
||||
},
|
||||
"axis=z": {
|
||||
"model": "minecraft:block/bamboo_block_z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"face=ceiling,facing=east,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"face=ceiling,facing=north,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=north,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=south,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"x": 180
|
||||
},
|
||||
"face=ceiling,facing=south,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"x": 180
|
||||
},
|
||||
"face=ceiling,facing=west,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=west,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=east,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=east,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button"
|
||||
},
|
||||
"face=floor,facing=north,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed"
|
||||
},
|
||||
"face=floor,facing=south,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=south,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=west,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=east,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"uvlock": true,
|
||||
"x": 90
|
||||
},
|
||||
"face=wall,facing=north,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90
|
||||
},
|
||||
"face=wall,facing=south,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=south,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west,powered=false": {
|
||||
"model": "minecraft:block/bamboo_button",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=west,powered=true": {
|
||||
"model": "minecraft:block/bamboo_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower,hinge=left,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_left"
|
||||
},
|
||||
"facing=east,half=lower,hinge=left,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_left_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=lower,hinge=right,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_right"
|
||||
},
|
||||
"facing=east,half=lower,hinge=right,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_right_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper,hinge=left,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_top_left"
|
||||
},
|
||||
"facing=east,half=upper,hinge=left,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_top_left_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=upper,hinge=right,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_top_right"
|
||||
},
|
||||
"facing=east,half=upper,hinge=right,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_top_right_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=lower,hinge=left,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_left",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=lower,hinge=left,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_left_open"
|
||||
},
|
||||
"facing=north,half=lower,hinge=right,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_right",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=lower,hinge=right,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_right_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=upper,hinge=left,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_top_left",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=upper,hinge=left,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_top_left_open"
|
||||
},
|
||||
"facing=north,half=upper,hinge=right,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_top_right",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=upper,hinge=right,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_top_right_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=lower,hinge=left,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_left",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=lower,hinge=left,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_left_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=lower,hinge=right,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_right",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=lower,hinge=right,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_right_open"
|
||||
},
|
||||
"facing=south,half=upper,hinge=left,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_top_left",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=upper,hinge=left,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_top_left_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=upper,hinge=right,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_top_right",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=upper,hinge=right,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_top_right_open"
|
||||
},
|
||||
"facing=west,half=lower,hinge=left,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_left",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower,hinge=left,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_left_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=lower,hinge=right,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_right",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower,hinge=right,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_bottom_right_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=upper,hinge=left,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_top_left",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper,hinge=left,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_top_left_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=upper,hinge=right,open=false": {
|
||||
"model": "minecraft:block/bamboo_door_top_right",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper,hinge=right,open=true": {
|
||||
"model": "minecraft:block/bamboo_door_top_right_open",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"multipart": [
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_fence_post"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_fence_side_north"
|
||||
},
|
||||
"when": {
|
||||
"north": "true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_fence_side_east"
|
||||
},
|
||||
"when": {
|
||||
"east": "true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_fence_side_south"
|
||||
},
|
||||
"when": {
|
||||
"south": "true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_fence_side_west"
|
||||
},
|
||||
"when": {
|
||||
"west": "true"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,in_wall=false,open=false": {
|
||||
"model": "minecraft:block/bamboo_fence_gate",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,in_wall=false,open=true": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,in_wall=true,open=false": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_wall",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,in_wall=true,open=true": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_wall_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,in_wall=false,open=false": {
|
||||
"model": "minecraft:block/bamboo_fence_gate",
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,in_wall=false,open=true": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,in_wall=true,open=false": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_wall",
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,in_wall=true,open=true": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_wall_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,in_wall=false,open=false": {
|
||||
"model": "minecraft:block/bamboo_fence_gate"
|
||||
},
|
||||
"facing=south,in_wall=false,open=true": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_open"
|
||||
},
|
||||
"facing=south,in_wall=true,open=false": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_wall"
|
||||
},
|
||||
"facing=south,in_wall=true,open=true": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_wall_open"
|
||||
},
|
||||
"facing=west,in_wall=false,open=false": {
|
||||
"model": "minecraft:block/bamboo_fence_gate",
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,in_wall=false,open=true": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,in_wall=true,open=false": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_wall",
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,in_wall=true,open=true": {
|
||||
"model": "minecraft:block/bamboo_fence_gate_wall_open",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/bamboo_hanging_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/bamboo_mosaic"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"variants": {
|
||||
"type=bottom": {
|
||||
"model": "minecraft:block/bamboo_mosaic_slab"
|
||||
},
|
||||
"type=double": {
|
||||
"model": "minecraft:block/bamboo_mosaic"
|
||||
},
|
||||
"type=top": {
|
||||
"model": "minecraft:block/bamboo_mosaic_slab_top"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner"
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer"
|
||||
},
|
||||
"facing=east,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs"
|
||||
},
|
||||
"facing=east,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner"
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer"
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_mosaic_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/bamboo_planks"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"variants": {
|
||||
"powered=false": {
|
||||
"model": "minecraft:block/bamboo_pressure_plate"
|
||||
},
|
||||
"powered=true": {
|
||||
"model": "minecraft:block/bamboo_pressure_plate_down"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/bamboo_sapling"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,402 @@
|
||||
{
|
||||
"multipart": [
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf"
|
||||
},
|
||||
"when": {
|
||||
"facing": "north"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"facing": "east"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"facing": "south"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"facing": "west"
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_unpowered"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "false"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "false"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "false"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "false"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_unconnected"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "unconnected"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_unconnected",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "unconnected"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_unconnected",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "unconnected"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_unconnected",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "unconnected"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_left"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "left"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_left",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "left"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_left",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "left"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_left",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "left"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_center"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_center",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_center",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_center",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "center"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_right"
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "north"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "right"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_right",
|
||||
"y": 90
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "east"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "right"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_right",
|
||||
"y": 180
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "south"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "right"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"apply": {
|
||||
"model": "minecraft:block/bamboo_shelf_right",
|
||||
"y": 270
|
||||
},
|
||||
"when": {
|
||||
"AND": [
|
||||
{
|
||||
"facing": "west"
|
||||
},
|
||||
{
|
||||
"powered": "true"
|
||||
},
|
||||
{
|
||||
"side_chain": "right"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/bamboo_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"variants": {
|
||||
"type=bottom": {
|
||||
"model": "minecraft:block/bamboo_slab"
|
||||
},
|
||||
"type=double": {
|
||||
"model": "minecraft:block/bamboo_planks"
|
||||
},
|
||||
"type=top": {
|
||||
"model": "minecraft:block/bamboo_slab_top"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner"
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer"
|
||||
},
|
||||
"facing=east,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_stairs"
|
||||
},
|
||||
"facing=east,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_stairs",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner"
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer"
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_stairs",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_stairs",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_inner",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=outer_left": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=outer_right": {
|
||||
"model": "minecraft:block/bamboo_stairs_outer",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=straight": {
|
||||
"model": "minecraft:block/bamboo_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=bottom,open=false": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=bottom,open=true": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,open=false": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,open=true": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_open",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,open=false": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_bottom"
|
||||
},
|
||||
"facing=north,half=bottom,open=true": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_open"
|
||||
},
|
||||
"facing=north,half=top,open=false": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_top"
|
||||
},
|
||||
"facing=north,half=top,open=true": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_open",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=bottom,open=false": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=bottom,open=true": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,open=false": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,open=true": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_open",
|
||||
"x": 180
|
||||
},
|
||||
"facing=west,half=bottom,open=false": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=bottom,open=true": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,open=false": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_top",
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,open=true": {
|
||||
"model": "minecraft:block/bamboo_trapdoor_open",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
||||
Loaded 100 of 10451 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user